Coding Test
728x90

Coding Test

728x90

    숫자의 표현 (약수의 개수)

    자연수 n을 연속한 자연수들로 표현 하는 방법 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution n의 홀수인 약수의 개수 약수가 1 : 1로 인해 15는 연속하는 하나의 자연수, 15 약수가 3 : 3으로 인해 15는 5+5+5 의 합으로 표현되는 것을 알 수 있고 약간의 조작을 통해 4+5+6 (연속하는 자연수) 약수가 5 : 5도 마찬가지로 3+3+3+3+3 즉, 1+2+3+4+5 약수가 15 : 모든 홀수 2n+1는 n 과 n+1, 연속하는 두 수의 합으로 표현 할 수 있으므로..

    롤케이크 자르기 (해시, 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