본문 바로가기

프로그래머스127

[프로그래머스] 빛의 경로 사이클 (Python) https://programmers.co.kr/learn/courses/30/lessons/86052 코딩테스트 연습 - 빛의 경로 사이클 각 칸마다 S, L, 또는 R가 써져 있는 격자가 있습니다. 당신은 이 격자에서 빛을 쏘고자 합니다. 이 격자의 각 칸에는 다음과 같은 특이한 성질이 있습니다. 빛이 "S"가 써진 칸에 도달한 경우, 직진 programmers.co.kr 각각의 위치에 대해서 모든 방향으로 방문했는지 체크하면서, 이동할 때에 규칙을 잘 설정해야 한다. 마지막에 오름차순으로 정렬하는걸 못 봐서 한참 헤맸다. 나의 풀이 from collections import deque def solution(grid): answer =[] len_x, len_y = len(grid),len(grid[.. 2021. 11. 7.
[프로그래머스] N개의 최소공배수 (Python) https://programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 최소 공배수 구현 문제 나의 풀이 import math def lcm(a,b): return a*b // math.gcd(a,b) def solution(arr): if len(arr) ==1: return arr[0] else: a = lcm(arr[0],arr[1]) for i in arr[2:]: a = lcm(a.. 2021. 11. 7.
[프로그래머스] JadenCase 문자열 만들기 (Python) https://programmers.co.kr/learn/courses/30/lessons/12951 코딩테스트 연습 - JadenCase 문자열 만들기 JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 programmers.co.kr 문제 조건이 좀 명확하게 와닿지 않아서 풀다가 헤맸다 예를 들어, 입력으로 주어지는 s가 AAA aa aa 라면 (중간에 공백 중복) 라면 결과로는 Aaa Aa Aa가 나와야 한다. 즉, 공백이 그대로 유지돼야 한다. 이는 split( ) 으로 하면 여러 개 공백을 하나로 치기 때문에 틀린다. 따라서 s.. 2021. 11. 7.
[프로그래머스] 행렬의 곱셈 (Python) https://programmers.co.kr/learn/courses/30/lessons/12949 코딩테스트 연습 - 행렬의 곱셈 [[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]] programmers.co.kr 행렬의 곱셈을 구현하면 됨, 뭔가 손 가는 대로 해서 이상한 감이 있는 것 같다. 나의 풀이 def solution(arr1, arr2): arr3 = [[0]*len(arr2) for _ in range(len(arr2[0]))] for i in range(len(arr3)): for j in range(len(arr3[0])): arr3[i].. 2021. 11. 7.
[프로그래머스] 피보나치 수(Python) https://programmers.co.kr/learn/courses/30/lessons/12945 코딩테스트 연습 - 피보나치 수 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = programmers.co.kr DP 유형의 대표격인 피보나치 수 문제다 나의 풀이 def solution(n): fibo = [0]*(n+1) fibo[0],fibo[1] = 0, 1 for i in range(2,n+.. 2021. 11. 7.
[프로그래머스] 최댓값과 최솟값 (Python) https://programmers.co.kr/learn/courses/30/lessons/12939 코딩테스트 연습 - 최댓값과 최솟값 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를 programmers.co.kr 나의 풀이 def solution(s): num_list = list(map(int,s.split())) max_num,min_num = max(num_list),min(num_list) return str(min_num)+' '+str(max_num) 2021. 11. 7.
[프로그래머스] 숫자의 표현 (Python) https://programmers.co.kr/learn/courses/30/lessons/12924 코딩테스트 연습 - 숫자의 표현 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 programmers.co.kr 나의 풀이 def solution(n): answer = 1 for i in range(1,n//2+1): check = i for j in range(i+1,n-i+1): check+=j if check == n: answer += 1 elif check > n: break return answer 2021. 11. 7.
[프로그래머스] 땅따먹기 (Python) https://programmers.co.kr/learn/courses/30/lessons/12913 코딩테스트 연습 - 땅따먹기 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟 programmers.co.kr DP 유형의 문제다. dp[i][j] 는 (i , j)의 위치에서 가장 큰 경우다. 나의 풀이 def solution(land): dp = [[0]*4 for _ in range(len(land))] for i in range(4): dp[0][i] = land[0][i] for i in range(1,len(land)): for j in r.. 2021. 11. 7.
[프로그래머스] 다음 큰 숫자 (Python) https://programmers.co.kr/learn/courses/30/lessons/12911 코딩테스트 연습 - 다음 큰 숫자 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니 programmers.co.kr bin을 활용해서 풀면 된다. 나의 풀이 def solution(n): one_count = bin(n).count('1') n+=1 while n: if one_count == bin(n).count('1'): return n else: n+=1 2021. 11. 7.
[프로그래머스] n진수 게임 (Python) https://programmers.co.kr/learn/courses/30/lessons/17687 코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0 programmers.co.kr 1. 튜브가 말해야 하는 순서를 구한다 (p + m * i ) 단, 0 0: n , mod = divmod(n,q) if mod >=10: base += num_dict[mod] else: base += str(mod) return base[::-1] def solution(n, t, m, p): answer = '' turn_list = [(p.. 2021. 11. 7.
[프로그래머스] 파일명 정렬 (Python) https://programmers.co.kr/learn/courses/30/lessons/17686 코딩테스트 연습 - [3차] 파일명 정렬 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램 programmers.co.kr 정규표현식을 활용해서 문제를 풀면 된다. 자주 사용되는 정규표현식은 미리미리 숙달해놔야겠다. import re from collections import defaultdict def solution(files): answer = [] head = re.compile('^\D+') number = re.compile('\d{1,5}') # tail = .. 2021. 11. 7.
[프로그래머스] 압축 (Python) https://programmers.co.kr/learn/courses/30/lessons/17684 코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] programmers.co.kr 주어진 조건대로 구현하면 된다. from collections import defaultdict def solution(msg): alphabet ='ABCDEFGHIJKLMNOPQRSTUVWXYZ' answer = [] dict = defaultdict(int) for i,alpha in enumerate(alphabet): dict[alpha] = i+1 start, end, va.. 2021. 11. 6.
[프로그래머스] 가장 큰 정사각형 찾기 (Python) https://programmers.co.kr/learn/courses/30/lessons/12905 코딩테스트 연습 - 가장 큰 정사각형 찾기 [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9 programmers.co.kr 전형적인 DP 문제다. DP를 만족하기 위해서 1. 최적 부분 구조 (Optimal Substructure) - 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다. 2. 중복되는 부분 문제 (Overlapping Subproblem) - 동일한 작은 문제를 반복적으로 해결해야 한다. 이 정사각형 문제도 위의 두 조건을 만족한다. 처음엔 완전 탐색으로 풀었는데, 효율성 테스트에서 시간 초과가 나서 생각해보니 dp로.. 2021. 11. 6.
[프로그래머스] 방금 그곡 (Python) https://programmers.co.kr/learn/courses/30/lessons/17683 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, programmers.co.kr 내가 짠 알고리즘은 다음과 같다. 1. #들어가 있는 음은 변환 2. 라디오에서의 play_time 계산 3. play_time과 실제 음악 시간과 비교해서 실제 재생된 음악 값으로 변경 4. 네오가 기억하는 멜로디가 실제 재생 된 음악에 있다면 5. 후보군에 이름, 재생된 시간, 입력된 순서 저장 6. 재생된 시간과, 입력된 순서 기준으로 정렬 7.. 2021. 11. 4.
[프로그래머스] 방문 길이 (Python) https://programmers.co.kr/learn/courses/30/lessons/49994 코딩테스트 연습 - 방문 길이 programmers.co.kr set을 활용해서 풀면 된다. 주의해야 할 점은 (0, 0) -> (1, 0)으로 가는 길과 (1, 0) -> (0, 0)으로 가는 길은 동일한 길이다. 나의 풀이 from collections import defaultdict def solution(dirs): answer = 0 load = defaultdict(set) x, y = 0,0 for dir in dirs: if dir =='U': if y+1 -6: load[(x,y)].update([(x,y-1)]) load[(x,y-1)].update([(x,y)]) x,y = x,y-.. 2021. 11. 4.