Coding Test/programmers
롤케이크 자르기 (해시, Counter, set)
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr from collections import Counter def solution(topping): dic = Counter(topping) set_dic = set() res = 0 for i in topping: dic[i] -= 1 set_dic.add(i) if dic[i] == 0: dic.pop(i) if len(dic) == len(set_dic): res += 1 return res
햄버거 만들기 (스택)
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(ingredient): s = [] cnt = 0 for i in ingredient: s.append(i) if s[-4:] == [1, 2, 3, 1]: cnt += 1 for _ in range(4): s.pop() return cnt
택배 상자(스택, 큐)
영재가 5개의 상자를 실어야 하며, 택배 기사님이 알려준 순서가 [4, 3, 1, 2, 5] 영재는 우선 첫 번째, 두 번째, 세 번째 상자를 보조 컨테이너 벨트에 보관합니다. 그 후 네 번째 상자를 트럭에 싣고 보조 컨테이너 벨트에서 세 번째 상자 빼서 트럭에싣습니다. 다음으로 첫 번째 상자를 실어야 하지만 보조 컨테이너 벨트에서는 두 번째 상자를, 기존의 컨테이너 벨트에는 다섯 번째 상자를 꺼낼 수 있기 때문에 더이상의 상자는 실을 수 없습니다. 따라서 트럭에는 2개의 상자만 실리게 됩니다. def solution(order): assist = [] i = 1 cnt = 0 while i != len(order)+1: assist.append(i) while assist and assist[-1] =..
N-Queen (DFS)
def dfs(queen, n, row): count = 0 if n == row: return 1 for col in range(n): queen[row] = col for x in range(row): if queen[x] == queen[row]: # 세로 break if abs(queen[x]-queen[row]) == (row-x): # 대각선 break else: count += dfs(queen, n, row+1) return count def solution(n): queen = [0]*n return dfs(queen, n, 0)
모의고사 (반복되는 리스트 값 비교, 인덱스)
def solution(answers): a=[1,2,3,4,5] b=[2,1,2,3,2,4,2,5] c=[3,3,1,1,2,2,4,4,5,5] t1=t2=t3=0 for i in range(len(answers)): if a[i%5]==answers[i]: t1+=1 if b[i%8]==answers[i]: t2+=1 if c[i%10]==answers[i]: t3+=1 maxval=max(t1,t2,t3) answer=[] if maxval == t1: answer.append(1) if maxval == t2: answer.append(2) if maxval == t3: answer.append(3) return answer
부대복귀 (BFS, duque)
from collections import deque def solution(n, roads, sources, destination): q = deque([destination]) graph = [[] for _ in range(n+1)] for s, e in roads: graph[s].append(e) graph[e].append(s) visit = [-1]*(n+1) visit[destination] = 0 while q: now = q.popleft() for x in graph[now]: if visit[x] == -1: visit[x] = visit[now]+1 q.append(x) return [visit[i] for i in sources]
기사단원의 무기 (약수의 개수)
def solution(number, limit, power): answer = 0 for x in range(1,number+1): cnt=0 for i in range(1, int(x**(1/2))+1): if x%i==0: cnt+=1 if i**2 != x: #제곱이 되는 약수 중복 방지 cnt+=1 if cnt>limit: cnt=power answer+=cnt return answer
마법의 엘리베이터
def solution(storey): answer = 0 while storey: r = storey % 10 print(storey,r) if r > 5:# 6 ~ 9 answer += (10-r) storey += 10 else: if r==5 and (storey // 10) % 10 > 4: storey += 10 answer+=r storey //= 10 return answer
시저암호(알파벳, 리스트 인덱스 밀기)
from string import ascii_uppercase, ascii_lowercase a = ascii_uppercase b = ascii_lowercase def solution(s, n): answer='' for x in s: if x.islower(): answer+=b[(b.index(x)+n)%len(b)] elif x.isupper(): answer+=a[(a.index(x)+n)%len(a)] else: answer += x return answer
테이블 해시 함수 (정렬)
def solution(data, col, row_begin, row_end): answer = 0 data.sort(key=lambda x: (x[col-1], -x[0])) for i in range(row_begin, row_end+1): result = 0 for x in data[i-1]: result += x % i answer ^= result return answer