[프로그래머스/Python] 의상
·
Algorithm/Programmers
백준 '9375번, 패션왕 신해빈' 문제와 완전 똑같기 때문에 풀이도 똑같다. 해당 문제 풀이는 여기 참고! def solution(clothes): closet = {} for cloth, type in clothes: if type not in closet: closet[type] = 1 closet[type] += 1 answer = 1 for k, v in closet.items(): answer *= v return answer - 1
[프로그래머스/Python] 전화번호 목록
·
Algorithm/Programmers
처음 풀었던 방법인데 효율성 테스트 3,4 에서 시간초과가 뜬 코드다 def solution(phone_book): p = [] answer = True for num in sorted(phone_book, key = lambda x: len(x)): for prefix in p: if num[:len(prefix)] == prefix: answer = False else: p.append(num) if not answer: break return answer startswith 도 써보고, 길이로 정렬이 아닌 그냥 문자열 정렬을 해주기도 했지만 계속 시간 초과가 나서 풀이 과정에 뭔가 생각의 전환이 필요함을 느꼈다!! 참고로 문자열 숫자 정렬은 숫자 크기가 아닌, 앞의 글자 숫자 크기로 정렬을 한다(내..
[백준/Python] 13549번-숨바꼭질 3
·
Algorithm/BaekJoon
import sys from collections import deque input = sys.stdin.readline MAX = 100000 + 1 n, k = map(int, input().split()) visited = [-1] * MAX # [위치][시간] 으로 하려고 했으나 메모리 초과로 [위치]=시간으로 바꿈(물론 dist 배열을 따로 둬도 됨) def bfs(): q = deque() q.append(n) visited[n] = 0 while q: loc = q.popleft() # 동생 위치를 찾음 if loc == k: return visited[loc] # 순간이동 if loc * 2 < MAX and visited[loc*2] == -1: visited[loc*2] = visite..
[백준/Python] 9375번 - 패션왕 신해빈
·
Algorithm/BaekJoon
import sys input = sys.stdin.readline for _ in range(int(input())): clothes = {} # 옷 분류 for _ in range(int(input())): cloth, type = input().rstrip().split() if type in clothes: clothes[type] += 1 else: clothes[type] = 1 # 분류 대로 코디하기 # +1 해서 숫자를 모두 곱하고 -1(알몸) result = 1 for _, v in clothes.items(): result *= (v + 1) # 이 분류를 코디에 포함하지 않는 경우의 수 print(result - 1) 고등학교 때 배운 확률 과목이 계속 생각났다ㅋㅋㅋ 옷을 분류하고, ..
[프로그래머스/Python] 뒤에 있는 큰 수 찾기
·
Algorithm/Programmers
def solution(numbers): answer = [-1] stack = [numbers[-1]] for i in range(len(numbers)-2, -1, -1): while stack and stack[-1] numbers[i-1]: stack.append(numbers[i]) answer.reverse() return answer 백준-탑 문제와 유사하다. stack에 큰 숫자들을 쌓는다. 현재 top보다 큰 숫자가 나오면 pop()을 해준다. 스택이 비어있으면, 현재 숫자보다 큰 숫자가 뒤에 없었다는 뜻이므로 -1을 넣어준다. 스택이 남아 있다면, 현재 숫자의 뒤에 있는 큰 수는 top 이다. 그리고 마지막에 현재 값도 넣어주는데, 현재 값이 다음 값보다는 큰 수일 수 있기 때문이다. ..
[프로그래머스/Python] 스택/큐
·
Algorithm/Programmers
import math def solution(progresses, speeds): answer = [] works = [] # 작업 시간 배열 for i in range(len(progresses)): work = math.ceil((100 - progresses[i]) / speeds[i]) works.append(work) big = works[0] # 가장 긴 작업 시간 cnt = 1 for i in range(1, len(progresses)): if works[i]