본문 바로가기

알고리즘 & 코딩테스트

(48)
Programmers Lv.1 "두 개 뽑아서 더하기" 주어진 정수배열의 요소 중 2개를 뽑아 덧셈을 한 결과를 반환하면 되는데 모든 경우를 다 체크하면 된다. 알고있다면 조금 쉬울 수 있는데, 예전에 배웠던 '조합'을 이용하면 쉽게쉽게 구할 수 있다. from itertools import combinations def solution(numbers): return sorted(list(set([sum([i,j]) for i,j in combinations(numbers,2)])))
Programmers Lv.1 "K번째수" 쉬운 내용의 문제이다. 주어진 범위로 배열을 자르고 정렬한 뒤, 요구하는 위치의 숫자를 반환하면 되는 것이다. 즉, 문제에서 나열된 그대로 코드를 짜면 되는 정렬이면서 동시에 구현문제라고도 볼 수 있겠다. def solution(array, commands): answer = [] for i in range(len(commands)): temp = array[commands[i][0]-1:commands[i][1]] temp.sort() answer.append(temp[commands[i][2]-1]) return answer
Programmers Lv.1 "문자열 내 마음대로 정렬하기" 이 문제의 핵심은 정렬의 기준이 각 문자열의 인덱스 n번째 글자라는 점이다. 즉, 정렬시 Lambda식을 이용하여 기준을 직접지정해주면 된다. def solution(strings, n): strings = sorted(strings, reverse=False) strings = sorted(strings, key=lambda x : x[n]) return strings
Programmers Lv.1 "숫자 문자열과 영단어" 사실 요 문제는 약간의 꼼수를 썼는데, 문제를 풀 당시 귀찮았는지 다른 알고리즘이 생각이 안났었다. 그래서 그냥 숫자와 영단어를 딕셔너리로 매칭해서 적어놓고 주어진 문자열 s에서 문자열로 된부분을 딕셔너리에서 뽑아서 치환시켰다. def solution(s): table = {"zero":"0","one":"1","two":"2","three":"3","four":"4","five":"5","six":"6","seven":"7","eight":"8","nine":"9"} for key in table: s = s.replace(key, table[key]) return int(s)
Programmers Lv.1 "[1차] 비밀지도" 그림을 보면 바로 보이는 분들도 계실것이다. 흰 빈칸과 #이 들어가 있는 칸을 각각 0과 1로 치환하여 만들어진 이진수를 10진수로 바꾸는데 그것을 각 행별로 arr에 담아서 주어진다. 그림에서 보여지듯, 빈칸과 빈칸이 만나면 빈칸이되고, 그렇지 않은 경우엔 #이되는것을 알 수 있다. 즉, 핵심은 arr1과 arr2에 주어진 각 행을 비트연산자 OR을 이용해 처리하면 되는것이다. 그후 다시 0과 1을 각각 빈칸과 #으로 치환시켜 반환해주면 된다. def solution(n, arr1, arr2): answer = [] for first, second in zip(arr1, arr2): tmp = bin(first | second)[2:] if len(tmp)