본문 바로가기

알고리즘

(8)
[백준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) 최고의 집합 문제 접근 방법 조건을 만족하지 않는 경우를 먼저 생각했다. 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인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로..
[파이썬] level3 시저암호 (level3)시저암호 문제 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. A를 3만큼 밀면 D가 되고 z를 1만큼 밀면 a가 됩니다. 공백은 수정하지 않습니다. 보낼 문자열 s와 얼마나 밀지 알려주는 n을 입력받아 암호문을 만드는 ceasar 함수를 완성해 보세요. “a B z”,4를 입력받았다면 “e F d”를 리턴합니다. 나의 접근법 이상하게 쉽게 풀릴 것 같았는데, 하루정도 걸려서 풀었다. 가장 직관적으로 떠오른 생각은 아스키코드(ASCII) 코드를 활용하자는 것이다. 아스키코드가 뭔지 잘 모른다면, 쑥쓰러운 나의 블로그 포스팅 아스키코드와 유니코드의 이해 을 소개한다. 문제를 풀 때 가장 먼저 고려했던 것은 공백을 반영해야 한다는 것..
[파이썬] 다음 큰 숫자(next big number) 다음큰숫자 문제 (http://tryhelloworld.co.kr/challenge_codes/173) 어떤 수 N(1≤N≤1,000,000) 이 주어졌을 때, N의 다음 큰 숫자는 다음과 같습니다. N의 다음 큰 숫자는 N을 2진수로 바꾸었을 때의 1의 개수와 같은 개수로 이루어진 수입니다. 1번째 조건을 만족하는 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 찾아야 합니다. 예를 들어, 78을 2진수로 바꾸면 1001110 이며, 78의 다음 큰 숫자는 83으로 2진수는 1010011 입니다. N이 주어질 때, N의 다음 큰 숫자를 찾는 nextBigNumber 함수를 완성하세요. 나의 풀이 def nextBigNumber(n): ''' 정수형태의 파라미터 값(n)을 받는다. (1) make_nu..