본문 바로가기

프로그래밍/코드분석

(25)
[백준1935번] (C) 후위표기식2 (1935)후위표기식 백준 1935번 https://www.acmicpc.net/problem/1935 착안점 double형 스택을 구조체로 선언 +, -, *, /인 경우를 제외하면 피연산자이므로 int형 배열에 있는 원소를 push 테크닉 push(ch-'A') 입력 예제를 보면, ABCDE와 같은 피연산자는 숫자로 변환한 뒤, push해줘야 한다. 피연산자는 항상 A, B, 부터 입력되므로 array 배열에 있는 원소들을 차곡차곡 push하기 위해서는 ch-'A'만큼 빼주어야 한다. 맨 처음에 입력하는 num이 곧 array 배열의 길이기 때문에 AA+A+ 입력된다 할지라도 상관이 없다. 실수했던 점 calculate 함수의 parameter를 double로 선언하지 않았던 점. 함수(pop, pe..
[백준1918번] (C) 후위표기식 백준 1918번 착안점 각 연산자(operator)의 우선순위값을 return해주는 isOperator 함수를 만들어줬다. (, ) : 우선순위 0 +, - : 우선순위 1 *, / : 우선순위 2 피연산자 : 우선순위 -1 (즉, A, B, C) postfix함수가 가장 중요한 함수라고 할 수 있다. for문을 이용해 글자 하나하나씩 읽어나간다. 우선순위 -1 : 피연산자는 그대로 출력 열린괄호 ( : 스택에 push 닫힌괄호 ) : 스택에 있는 (를 만날 때까지 pop 우선순위 1 이상 스택이 비어있지 않고 && 스택에 있는 연산자의 우선순위가 더 높다면 pop 그외의 경우라면 스택에 push 맨 마지막에서는 스택에 남아있는 것이 없도록 모두 pop #include #include #define MA..
[파이썬](level4)공항 건설하기 (level4)공항 건설하기 문제 주의점은 음수의 좌표값도 들어간다는 것이다. 나의 풀이 총 세 가지 방법으로 풀어봤습니다. 결론적으로 말하면 아래 두 가지 풀이 모두 시간초과가 발생헀습니다. 그래서 for문을 점점 줄여나가는 방법을 모색했더니 총 3가지의 풀이가 나왔습니다. 저는 아직도 이게 답이라고 믿고 있지만 내장함수를 사용해도 내부에서 반복문이 돌아가기 떄문에 에러가 발생한 듯 합니다. 풀이1 def chooseCity(n,city): dist = [] efficient = [] for i in zip(*city): dist.append(list(i)) for i in range(0, n): new_dist = dist[0][:i] + dist[0][i+1:] new_popu = dist[1][:..
[파이썬] (level4) 최고의 집합 문제 접근 방법 조건을 만족하지 않는 경우를 먼저 생각했다. Sum // n을 먼저 해야된다고 생각했다. 위 두 생각을 통해 접근하기로 생각했고, 10분 정도가 걸렸다. 나의 풀이 def bestSet(n, s): if n > s: return [-1] else: element = s // n answer = [element] * n if sum(answer) != s: diff = s - sum(answer) for i in range(1, diff+1): answer[-i] += 1 return answer return answer 우선, n이 sum보다 크다면 배열을 만들 수가 없다. 이 경우에는 return [-1]을 한다. element = s // n # 만약 n=8, S=80이면 몫은 9가 ..
[파이썬] (level4) 땅따먹기 게임 자소서 문제 접근 방법 pre_dup : 이전(previous) 라인의 max값 중복 유무 cur_dup : 현재(current) 라인의 max값 중복 유무 pre_max_idx : 이전 라인의 max값 인덱스 cur_max_idx : 현재 라인의 max값 인덱스 경우의 수를 직접 만들어봐야 한다. 인덱스의 겹침 유무는 나중에 판단해도 된다. max값이 리스트 내에 또 있는지가 중요하다. (즉, 중복 유무) 단, for문의 range는 0이 아니라 1 부터 시작한다고 가정한다. (1) pre_dup (O) cur_dup (O) 5 12 12 3
[파이썬] (level4) 숫자의 표현 (level4)숫자의 표현 문제접근법풀이def expressions(num): answer = 1 # 모든 num은 자기 자신을 답으로 가진다. _sum = 0 left = 0 while left != (num // 2 + 1): # left가 도달할 곳은 절반(num//2)면 충분하다. if _sum num: for right in range(left+1, num // 2 + 1 + 1): # right는 left + 1까지 체크 _sum += right # 합이 더 작다면, 계속해서 right..
[파이썬] (level4) 가장 큰 정사각형 찾기 (level4)가장 큰 정사각형 찾기 5중 포문 이용하기 데이터 개수 1452행 * 5열 배열일 때 (즉, 7260)개 일때, 100번 실행 결과의 평균 >>> print("실행시간 : ", time.time()-start_time) 1.1673초 아이디어 처음 풀었을 때는 DP의 개념을 몰랐기 때문에 노가다로 한번 풀어봤다. def findLargestSquare(board): # board의 길이를 측정한다. 다만, 전역변수 max_x와 max_y를 좌표값으로 활용해야 하기 때문에 (실제 길이 - 1)을 한다. max_x = len(board) - 1 max_y = len(board[0]) - 1 max_square = 0 # 정사각형의 최대 넓이 for x in range(0, len(board))..
[파이썬] 카카오 블라인드 공채 1번 문제 q1 친구따라서 풀어본 카카오 알고리즘 문제였다. 7문제가 출제되었고 부분 점수는 없었다. 나같은 경우에는 1번 문제, 5번 문제만 손댈 수 있었는데 1번 문제는 완벽하게 맞았다. 겨우 한 문제 맞았지만, 이정도라면 충분히 만족(?)스럽다. 꾸준하게 나아가자. 문제 def solution(n, arr1, arr2): answer = [] return answer 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로..