문제 코딩테스트 연습 - N으로 표현 programmers.co.kr 문제 풀이 특정한 숫자 `N`으로 사칙연산을 사용하여 `number`를 표현할 수 있는지 찾는 문제이다. 이때 `N`을 사용한 횟수가 가장 작은 경우를 찾아야 한다. 문제를 풀기 위해서는 `DP`를 통해서도 풀 수 있지만, `DFS`를 통해 풀더라도 간신히 통과할 수 있다. `DFS`를 통해 사용한 `N`의 수를 카운트하고, 카운트된 수가 8보다 크다면 더 이상 가지를 뻗을 필요 없이 종료하면 된다. 또한 만족하는 경우를 찾은 경우, 현재 찾은 카운트보다 `N`을 더 많이 사용한다면 가지를 뻗지 않으면 보다 시간을 단축시킬 수 있다. 코드 from math import inf answer = inf def dfs(n, cnt, num,..
문제 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 문제 풀이 주어진 연산 종류에 따라 큐에 연산을 삽입하고 삭제하는 과정을 진행한다. 연산의 종류에 따라 동작하는 과정은 다음과 같다. 명령어에 따라 큐에 숫자를 삽입하고, `D 1`인 경우 큐에서 최댓값을 삭제한다. 이와 달리 `D -1`인 경우 큐에서 최솟값을 삭제한다. 이는 별도로 `heapq`를 사용하지 않더라도 `list`를 통해 간단히 구현할 수 있다. 코드 def solution(operations): answer = [] for cur_op in operations: op, num = cur_op.split(' ') if op == 'I': answer.append(int(num)) elif answer: if num =..
문제 코딩테스트 연습 - 징검다리 출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가 programmers.co.kr 문제 풀이 출발지점부터 거리만큼 떨어진 곳에 도착지점이 있다. 이때 그 사이에 있는 바위들 중 몇 개를 제거하려고 한다. 특정 바위를 `N`개만큼 제거할 때 거리의 최솟값이 최대가 되는 경우를 구하는 문제이다. 이 문제는 문제의 분류와 같이 `이분 탐색`으로 해결할 수 있다. `이분 탐색`을 통해 최소값 기준으로, 빠진 돌의 개수를 카운트한 후 거리의 최솟값이 최대가 되는 경우를 찾으면 된다. 코드 from math import inf def ..
문제 코딩테스트 연습 - 가장 긴 팰린드롬 앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들 programmers.co.kr 문제 풀이 문자열이 주어질 때, 문자열의 부분 문자열 중 가장 긴 팰린드롬을 찾는 문제이다. 문제를 풀기 위해서는 `2중 반복문`을 통해 부분 문자열의 시작 위치와 끝 위치를 설정 후 팰린드롬인지 확인하면 된다. 코드 def solution(s): answer = -1 for i in range(len(s)): for j in range(i + 1, len(s) + 1): cur_string = s[i:..