본문 바로가기

알고리즘/프로그래머스7

124 나라의 숫자 level2 문제를 읽은 후 생각 - 중복조합을 사용해야하나? 그럼 언제 멈추지? - 일단 해보자 문제점 => combinations_with_replacement 를 사용하였다. 배열의 인덱스를 잘못 참조하여 런타임 에러 발생 코드도 너무 복잡하다... 인터넷 검색을 해보니 삼진법의 개념을 이용한 풀이가 있었다. 코드 더보기 def solution(n): answer = '' while n > 0: n -= 1 answer = '124'[n%3] + answer n //= 3 return answer 고찰 음... 이런 문제가 가장 어려워... 2021. 7. 24.
더 맵게 level2 문제를 읽은 후 생각 - queue나 heap을 써야겠다. - 어떤 음식들을 섞어야 가장 적은 횟수로 정답을 도출할 수 있을까? ex) K가 3, 음식 배열이 [1, 2, 5, 6] 이면 1과 2 음식을 섞어 1번이 최소가 된다. ex) K가 7, 음식 배열이 [1, 2, 9, 10]이면 1과 2를 섞은 후 그 결과인 5와 9를 섞는다. 총 2번임 다른 방법으로는 1과 10을 섞고 2와 9를 섞으면 된다. 이것도 총 2번임 2가지 방법을 정리하면 첫 번째 방법은 가장 안 매운 음식 2가지를 섞는 방식이고 두 번째 방법은 가장 안 매운 음식과 가장 매운 음식을 섞는 방법인데 두 번째 방법으로 하면 첫 번째 예시 또한 2번이란 결과가 나오게 된다. 그러므로 첫 번째 방법으로 문제를 풀기로 하였다. 가장 안 .. 2021. 7. 24.
오픈채팅방 level2 문제를 읽은 후 생각 - 파이썬 dict를 이용하자 - name dict를 만든 후 for loop을 돌며 answer array를 채워가자 코드 더보기 def solution(record): answer = [] enter = '님이 들어왔습니다.' leave = '님이 나갔습니다.' name_dict = dict() for info in record: info = info.split() if info[0] == 'Enter': name_dict[info[1]] = info[2] elif info[0] == 'Change': name_dict[info[1]] = info[2] for info in record: info = info.split() if info[0] == 'Enter': answer.a.. 2021. 7. 23.
기능개발 - level2 문제를 읽은 후 생각 - 100에서 progresses의 값을 뺀 후 그 값을 각 speed 값으로 나눈 후 올림값을 얻는다. - 이 값이 배포까지 걸리는 일 수가 된다. - 앞에서부터 비교하면서 뒤의 값이 현재값보다 작다면 같이 배포할 수 있단 뜻이므로 이 점을 고려하여 정답을 도출한다. 코드 더보기 def solution(progresses, speeds): answer = [] array = [] for num, speed in zip(progresses, speeds): tmp = 100 - num array.append(int((tmp / speed) + 0.9)) cnt = 0 while array: a = array.pop(0) cnt = 1 if array: while array and a.. 2021. 7. 21.