분류 전체보기
[프로그래머스] 해시 3. 위장
문제 풀이 1. 종류별로 몇 개의 의상이 있는지 딕셔너리에 저장 ex { 'headgear: 1', 'eyeware': 2 } 2. 각 종류에 착용하지 않는 경우의 수 1을 더해 서로 곱함 3. 모두 착용하지 않는 경우의 수인 1을 뺌 def solution(clothes): clothes_count = {} for c in clothes: if not c[1] in clothes_count: clothes_count[c[1]] = 0 clothes_count[c[1]] += 1 answer = 0 for k, v in clothes_count.items(): if answer == 0: answer = v + 1 else: answer *= (v + 1) return answer - 1 지난 주에 킥스..
[Google Kick Start] 2021 Round A
문제 1 codingcompetitions.withgoogle.com/kickstart/round/0000000000436140/000000000068cca3 Kick Start - Google’s Coding Competitions Hone your coding skills with algorithmic puzzles meant for students and those new to coding competitions. Participate in one round or join them all. codingcompetitions.withgoogle.com 풀이 문제가 영어여서 해석하는데 애를 먹었지만 이번 라운드 중 가장 쉬운 문제였다. abs를 안해줘서 틀렸었다ㅎ T = int(input()) for ..
[프로그래머스] 완전탐색 3. 카펫
문제 풀이 카펫의 가장자리만 브라운, 가운데는 노란색이려면 가로, 세로에 어떤 조건이 있을지 생각해봤다. 1. brown + yellow의 소인수일것이다. 입출력 예의 첫번째를 보자면 10 + 2 즉 12는 3과 4의 곱이다. 2. 가로와 세로에서 2씩 뺀 값을 곱하면 yellow 타일 개수일 것이다. 위 두 조건을 만족시키는 값을 찾으면 리턴했다. def solution(brown, yellow): for height in range(1, brown + yellow + 1): if (brown + yellow) % height == 0: width = int((brown + yellow) / height) if yellow == (height - 2) * (width - 2): return [width..
[프로그래머스] 완전탐색 2. 소수 찾기
문제 풀이 로직은 금방 생각 났는데 구현에서 오래 걸렸다. 에라토스테네스의 체도 간단하다고 생각했는데 구현에서 버벅댔다. 풀이는 다음과 같다. 1. 모든 숫자 조합을 allNums에 저장한다. 2. 그 중 가장 큰 수까지 에라토스테네스의 체로 소수를 찾는다. 3. 두 리스트의 교집합을 찾는다. from itertools import permutations def solution(numbers): answer = 0 allNums = [] for i in range(1, len(numbers) + 1): temp = list(permutations(list(numbers), i)) for i in temp: allNums.append(int(''.join(i))) n = max(allNums) eratos..
[프로그래머스] 스택/큐 4. 프린터
문제 풀이 처음에 보면서 역순으로 출력하고 같은 숫자가 있을 때에는 그중에 역순으로 출력된다고 생각했다. def solution(priorities, location): value = priorities[location] count = priorities.count(value) orderInSameValue = 0 for i in range(len(priorities)): if value == priorities[i]: orderInSameValue += 1 if location == i: break priorities.sort(reverse = True) return priorities.index(value) + (count - orderInSameValue) + 1 후다닥 짜봤는데 6개의 케이스에서만..
[프로그래머스] 스택/큐 3. 기능개발
문제 풀이 케이스 1번에서 배포 가능한 일은 7, 3, 9 이다. 먼저 이렇게 시간을 계산해 놓고 앞의 숫자들보다 큰 수가 나올 때까지 count하다가 큰 수가 나오면 count를 answer에 저장하면 될 것 같았다. 스택과 큐를 사용한 풀이는 아니었지만 한번 해봤다. 그리고 풀면서 굳이 시간을 먼저 계산하고 배열에 넣을 필요 없이 계산하면서 count해도 문제가 없을 것 같아 그렇게 수정했다. import math def solution(progresses, speeds): answer = [] maxValue = math.ceil((100 - progresses[0]) / speeds[0]) count = 1 for i in range(1, len(progresses)): if maxValue < ..
[프로그래머스] 정렬 3. H-Index
풀이 n번 이상 인용된 n개의 논문의 최댓값이 H인덱스이기 때문에 정렬을 하고 앞에서부터 인용횟수와 배열에서 남은 논문의 개수를 비교해서 maxH의 값을 업데이트했다. def solution(citations): maxH = 0 citations.sort() for i in range(len(citations)): if citations[i]
[프로그래머스] 스택/큐 1. 다리를 지나는 트럭
문제 풀이 처음에 두 가지 방법의 풀이가 떠올랐다. 1. 다리를 지나는 트럭 큐를 만든다. 반복문을 통해 트럭을 넣고, 중량의 합이 커 다음 트럭이 지나갈 수 없을 때에는 0을 채워넣으며 time을 +1씩 증가시킨다. 모든 트럭이 통과했을 때의 time을 반환한다. 2. 위와 같은 방식이지만, 트럭이 지나갈 수 없을 때 0을 채워넣으며 반복시키는 대신, 트럭이 들어온 시간을 저장해두었다가 가장 먼저 들어온 트럭을 내보내고 그만큼의 time을 더해준다. 이 방식은 반복문이 돌아가는 횟수를 줄여주어 값이 커지면 보다 좋은 효율을 보여줄 것이라 예상했다. 그래서 2번방식으로 코드를 작성하였는데 구연하다가 포기함. 복잡함,,, from collections import deque def solution(brid..