목록Algorithm (23)
영호
문제 링크 https://www.acmicpc.net/problem/9375 나의 풀이 옷을 입을 때 한 종류에서 하나의 옷 밖에 입을 수 없고, 옷의 이름들은 중복해서 주어지지 않기 때문에 저는 defaultdict(int)를 이용하여 문제를 해결했습니다. clothes[category] += 1 을 이용하여 해당 옷 종류에 몇 개의 옷들이 주어졌는지 기록을 합니다. 아래 예제의 첫 번째 입력을 보면 headgear라는 종류에 hat, turban 2가지 옷이 들어왔고, eyewear종류에 sunglasses 1가지 옷이 들어왔습니다. 이를 defaultdict로 표현하게 되면 아래와 같습니다. {'headgear' : 2, 'eyewear' : 1} 입을 수 있는 옷들의 조합을 구합니다. 우선 hea..
문제 링크 https://www.acmicpc.net/problem/1449 나의 풀이 기본적으로 물이 새는 위치를 정렬을 한다. start, end 포인터를 사용해 물이 새는 지점을 측정하기 시작한 지점[start]과 현재 항승이 서있는 [end]지점을 비교하며 테이프를 붙일지 안붙이고 한 칸 더 갈지 고민한다. 처음, start 는 0, end는 start 다음인 1부터 시작한다. end는 물이 샌 지점들을 모아놓은 배열의 index이기 때문에 n = 4인 경우, end가 3이 되면 배열의 마지막에 온 것이기 때문에 n-1보다 작거나 같을 때 까지 반복한다. end가 n-1보다 작거나 같을 때 까지 while문을 반복한다. 3가지 경우를 생각할 수 있다. 현재 항승이 서 있는 지점과 측정을 시작한 지..
문제 링크 https://programmers.co.kr/learn/courses/30/lessons/81303 나의 풀이 Linked List를 이용하여 주어진 조건들을 구현하면 된다 각 노드들에는 [prev, next, is_deleted]로 마지막 원소는 최종적으로 삭제되었는지를 판단하기 위해 추가했다. 되돌리기 명령어를 위해 deleted라는 stack을 이용한다. 배열로 풀게 되면 입력 노드들의 개수가 최대 1,000,000개, 명령어는 최대 200,000개라 삭제, 되돌리기 명령어 때문에 시간 초과가 날 수 있기 때문에 Linked List로 풀어야 한다. Code #https://programmers.co.kr/learn/courses/30/lessons/81303 def solution(n..
문제 링크 https://programmers.co.kr/learn/courses/30/lessons/81302 나의 풀이 places를 돌며 'P'인 경우 bfs를 수행한다. bfs에서 queue에는 [x, y, distance] 형식으로 넣고 처음에 distance는 0으로 설정한다. 이후 while문을 돌며 pop한 distance에 +1을 해주고, 해당 값이 3이 되면 거리두기 2를 지킨 경우이기 때문에 멈춘다. 만약 상하좌우 탐색 중 distance가 2 이하인데 'P'를 만나면 거리두기가 지켜지지 않은 경우이다. bfs탐색 결과 False가 나오면 거리두기를 지키지 않은 것이기 때문에 모든 반복문을 멈추고 false를 리턴한다. bfs탐색 결과 True면 거리두기를 잘 지킨 경우다. Code ..
문제 링크 https://www.acmicpc.net/problem/14502 나의 풀이 방법 안전영역인 0의 좌표들을 safe_zones배열에 저장한다. 3개의 벽을 세울 안전영역 3군데를 고른다. 이때 (1,1), (2,2), (3,3)에 세우는 것과 (1,1), (3,3), (2,2)에 세우는 것은 똑같은 경우이기 때문에, combination을 사용한다. 이 작업을 하지 않으면 시간초과가 발생한다. 안전영역에 3개의 벽을 세우는 모든 경우의 수에 대해 bfs를 수행한다. Code # 연구소 import sys from collections import deque from itertools import combinations input = sys.stdin.readline row, col = map..
문제 링크 https://programmers.co.kr/learn/courses/30/lessons/77484 접근 방법 rank배열을 만들어 [6, 6, 5, 4, 3, 2, 1]로 순위를 정해놓는다. 주어진 lottos에서 0을 count 한다. 0이 6개인 경우 lottos의 모든 번호를 모르기 때문에 1 ~ 6등 모두 가능하다 -> 최고 순위 : 1등, 최저 순위 : 6등 0이 한 개도 없는 경우 lottos와 win_nums를 정렬한다. lottos와 win_nums를 순회하며 동일한 번호가 경우를 카운트한다. 내가 고른 모든 lottos번호를 알기 때문에 일치하는 개수만큼 최고 순위와 최저 순위를 return 한다. 모르는 0이 1 ~ 5개인 경우 lottos를 내림차순으로 정렬한다. 6 -..
[프로그래머스] 2019카카오 BLIND 오픈채팅방 (Python) 문제 설명 - https://programmers.co.kr/learn/courses/30/lessons/42888 나의 풀이 uid : name 형태의 uid_name dictionary생성 record를 순회하며 변경되는 uid : name 최신화 다시 한 번 record를 순회하며 'Enter' or 'Leave'인 경우 uid_name[uid]를 조회해 '~~ 님이 들어왔습니다' or '~~님이 나갔습니다' answer에 append. Code #https://programmers.co.kr/learn/courses/30/lessons/42888 2019 KAKAO BLIND RECRUITMENT def solution(recor..