[Coding Test]
[프로그래머스] lv1 완주하지 못한 선수 / 파이썬, 고득점kit
완주하지 못한 선수 주의점! completion의 길이는 participant의 길이보다 1 작습니다. 해결방법! participant와 completion의 길이가 항상 1 차이나고 participant에는 동명이인이 있을 수 있다는 점을 고려한다 딕셔너리를 이용해 participant의 수를 세어주고 completion의 수를 뺴주어 딕셔너리에 개수가 0이 아닌 key를 출력 def solution(participant, completion): dict = {} for par in participant: if par not in dict: dict[par] = 1 else: dict[par] += 1 for com in completion: if dict[com] != 0: dict[com] -= 1..
[프로그래머스] lv1 폰켓몬 / 파이썬, 고득점kit
폰켓몬 딕셔너리를 이용해 중복을 없앤다는 것을 이용한 문제입니다. def solution(nums): dict = {} for i in nums: if i not in dict: dict[i] = 1 if len(nums) // 2
[프로그래머스] lv2 가장 큰 수 / 파이썬, 고득점kit
가장 큰 수 어려운 문제였다. 순열로 생각해서 모든 경우를 다 고민하면 된다고 생각했지만 시간 초과에 걸렸다. 주의점! [0, 0, 0, 0]을 정렬할 때 '가장 큰 수'를 구해야 하므로 0이 나와야 한다. 문자열로 출력해야 한다. def solution(numbers): numbers = list(map(str, numbers)) numbers.sort(key=lambda x : x*3, reverse=True) return str(int(''.join(numbers))) 두 번째 예시가 문제다. [3, 30, 34, 5, 9] "9534330" 파이썬 문자열을 큰 순서대로 정렬하면 문자열은 앞자리가 큰 순서대로 정렬되므로 9, 5, 34, 30, 3 이 된다. 하지만 3이 30보다 먼저와야 한다. 파..
[프로그래머스] lv1 K번째수 / 파이썬, 고득점kit
K번째수 파이썬으로 풀 경우 리스트 인덱싱의 의미를 알아야 한다. 주의점! 인덱스 넘버는 0부터 시작한다는 것을 명심하자! 문재해결 아이디어 특정 구간만큼 array의 값을 입력받아줄 새로운 리스트를 생성한다 입력받은 commands의 수 만큼 반복한다 def solution(array, commands): answer = [] for command in commands: tmp = array[command[0]-1:command[1]] tmp.sort() answer.append(tmp[command[2]-1]) return answer print(solution([1, 5, 2, 6, 3, 7, 4], [[2, 5, 3], [4, 4, 1], [1, 7, 3]]))
![[프로그래머스] lv3 아이템 줍기 / 파이썬 [해설과 다른 풀이], 고득점kit](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyC7hu%2Fbtstk321FFc%2FU5GU8ojFumK6gVaxtrOPaK%2Fimg.png)
[프로그래머스] lv3 아이템 줍기 / 파이썬 [해설과 다른 풀이], 고득점kit
문제 설명 ==> 아이템 줍기 까다로운 문제라고 생각한다. 깊이/너비 우선 탐색 문제이고 상하좌우로 이동하는 것은 다른 문제와 같지만 테두리만 움직여야 한다는 조건이 있다. 주의점! 테두리만 움직여야 한다. ㄷ자 구조의 한계 때문에 최소거리가 오작동 할 수 있다. ㄷ자 구조란? 사진 속 점선 처럼 밀접해 있는 구조를 의미한다. 그래서 많은 해설에서 ㄷ자 구조의 한계를 극복하기 위해 좌표값을 2배로 해주라 한다. ㄷ자 구조의 한계를 극복했기에 상하좌우대각선에서 하나라도 공백이 발생하게 된다. 그 공백이 하나라도 존재하면 그 위치는 테두리라 말할 수 있다. 사진 속 (1, 0)은 상하좌우 중 공백이 (2, 2)는 대각선에서 공백이 발생한다. 그래서 테두리라 말할 수 있다. 나는 위의 방법으로 구글 속 해설과..
[프로그래머스] lv3 단어 변환 / 파이썬, 고득점kit
begin에서 시작해서 target까지 단어로 변환하는데 한번에 하나의 글자만 바꿀 수 있다. 처음 문제를 읽고 이게 어떻게 그래프이론 문제지라고 생각했다. bfs의 풀이법을 떠올리면서 어떻게든 문제에 적용하려고 노력했던 문제다. 몇번만에 최소 횟수로 target에 도달할 수 있는지를 묻는 문제이기 때문에 visited를 이용해서 풀어야 한다고 생각했다. 주의점!! 한번에 하나의 글자만 바꿀 수 있다. begin과 target은 글자의 길이가 같다. target은 항상 words에 들어있다. 변환할 수 없는 경우 0을 반환한다. from collections import deque def bfs(begin, target, words, visited): q = deque() q.append([begin, ..