Coding Test/programmers
모음사전 (완전 탐색, product)
from itertools import product def solution(word): arr=['A', 'E', 'I', 'O', 'U'] arr.sort() prod=[] for i in range(1,6): prod+=list(product(arr, repeat=i)) prod.sort() cnt=1 for x in prod: str="".join(x) print(str) if str==word: break else: cnt+=1 return cnt
귤고르기 (정렬, Counter)
from collections import Counter def solution(k, tangerine): answer=0 d=Counter(tangerine) d = sorted(d.items(), key=lambda x: x[1], reverse=True) if len(d)==1: return 1 else: sum=0 for i in range(len(d)): if k>sum: sum += d[i][1] answer+=1 else: break return answer
소수찾기 (완전 탐색, permutations)
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr from itertools import permutations import math def solution(numbers): answer={} nums=[] for i in range(1,len(numbers)+1): nums+=permutations(numbers, i) for x in nums: n=int("".join(x)) if n
호텔대실 (구현)
https://school.programmers.co.kr/learn/courses/30/lessons/155651 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(book_time): check = [0]*1440 for times in book_time: sh, sm = map(int, times[0].split(':')) eh, em = map(int, times[1].split(':')) start = sh * 60 + sm end = eh * 60 + em + 10 # 청소시간 10분 포함 if end > 1440: # 24..
피로도 (던전탐험, 완전 탐색, permutations)
https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr """ 최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, 소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. """ from itertools import permutations def solution(k, dungeons): max_cnt=0 for x in permutations(dungeons, len(dungeons)): hp=k ..
사라지는 발판 (DFS)
https://school.programmers.co.kr/learn/courses/30/lessons/92345 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 dr=[0,0,-1,1] dc=[1,-1,0,0] def solution(board, aloc, bloc): n=len(board) m=len(board[0]) visited = [[0]*5 for _ in range(5)] # 방문 block=[[0]*5 for _ in range(5)] # 발판 def dfs(p1,p2): r, c = p1[0], p1[1] # 현재 플레이어 좌표 opr..
카드 짝 맞추기 (순열 permutations, BFS, DFS)
""" 1,2,3 짝을 맞춰야하는데 123,132,231,213,312,324 어떤 순서로 맞추는게 빠른지 -> 순열 구해서 인덱스 dfs 123도 어떤 1로 먼저 가야되는지 -> 2가지 경우 bfs 최솟값 출력 """ from collections import defaultdict, deque from itertools import permutations from copy import deepcopy def bfs(board, start, end): if start==end: return 0 q, visit = deque([[start[0], start[1], 0]]), {start} while q: # BFS x, y, c = q.popleft() for dx, dy in [(0,1),(0,-1),(..
뉴스 클러스터링 (문자열 리스트 합집합, 교집합, 중복 허용 다중집합)
from collections import Counter def solution(str1, str2): answer = 0 str1,str2=str1.upper(), str2.upper() a=[] for i in range(1,len(str1)): if str1[i-1].isalpha() and str1[i].isalpha(): a.append(str1[i-1]+str1[i]) b=[] for i in range(1,len(str2)): if str2[i-1].isalpha() and str2[i].isalpha(): b.append(str2[i-1]+str2[i]) if len(a)==len(b)==0: return 65536 a = Counter(a) b = Counter(b) c = list((a..
다트 게임 (구현)
def solution(dartResult): n='' temp=[] for i in range(len(dartResult)): x = dartResult[i] if x.isdecimal(): n+=x elif x.isalpha(): j=1 if x=='D': j=2 elif x=='T': j=3 temp.append(int(n)**j) n='' else: if x=='*': if len(temp)>1: temp[-2]=temp[-2]*2 temp[-1]=temp[-1]*2 elif x=='#': temp[-1]=temp[-1]*(-1) return sum(temp)
압축 (ascii_uppercase, 알파벳 딕셔너리)
from string import ascii_uppercase def solution(msg): answer = [] c = [i for i in range(1,27)] a= dict(zip(ascii_uppercase,c)) w='' for x in msg: w+=x if w not in a: a[w]=len(a)+1 answer.append(a[w[:-1]]) w = w[-1] answer.append(a[w]) return answer