목록전체 글 (122)
기록
programmers.co.kr/learn/courses/30/lessons/12899 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 10진수를 문제에서 정의한 '124 나라의 숫자'로 변환하는 문제입니다. 문제를 처음 봤을 때 DP 문제라고 생각했다가(ㅠㅠ) 감이 잡히지 않아 타 블로그에서 3진법이라는 키워드를 얻었습니다. 3진법 10진수 124나라의 숫자 1 1 1 2 2 2 10 3 4 12 4 11 20 5 12 21 6 14 22 7 21 100 8 22 101 9 24 실제 문제풀이에서는 10진수 기준으로 13까지 적어봤으며, '4'를 '3'으로 바꿔보기도 했습니다. 그러던 도중 3진법에서 0이 등장할 때 124나라의 숫자에는 4가 등장하고, 숫자가 묘하게 바뀜을 알 ..
programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 문제에서 요구하는 것을 구현하는 문제입니다. def solution(numbers, hand): answer = '' lHand = '*' rHand = '#' key_pos = {1:(0,0), 2:(0,1), 3:(0,2), 4:(1,0), 5:(1,1), 6:(..
programmers.co.kr/learn/courses/30/lessons/42889 코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스 programmers.co.kr 스테이지별 실패율을 구해서 스테이지를 실패율이 높은 순서대로 반환하는 문제입니다. 실패율은 문제에서 정의해 줬습니다. 실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 그리고 주의깊게 봐야 할 제한사항입니다. 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다. def solution(N, stag..
programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr def solution(board, moves): answer = 0 doll = [] for m in moves: for b in board: if b[m-1] == 0: continue else: doll.append(b[m-1]) b[m-1] = 0 break if len(doll) >= 2: if doll[-1] == doll[-2]: doll.pop() doll.pop() answer += 2..
programmers.co.kr/learn/courses/30/lessons/68935 코딩테스트 연습 - 3진법 뒤집기 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수 programmers.co.kr 문제의 요구사항은 매개변수로 받아온 10진수를 3진법으로 변환 후, 그 3진법을 뒤집어서 다시 10진법으로 바꾸는 것입니다. 그런데 3진법 기준 끝 숫자부터 list에 저장됨으로 굳이 뒤집을 필요는 없겠습니다. [ 내장함수를 활용한 풀이 ] def solution(n): answer = '' while n >= 1: n, rest..
programmers.co.kr/learn/courses/30/lessons/17681 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다 programmers.co.kr 십진수를 이진수로 바꾼 후 비트연산을 활용한 문제입니다. def solution2(n, arr1, arr2): answer = [] for num1, num2 in zip(arr1, arr2): tmp = bin(num1 | num2)[2:] if len(tmp) < n: tmp = '0'*(n-len(tmp)) + tmp tmp = tmp.replace('1', '#..
programmers.co.kr/learn/courses/30/lessons/17682 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 간단한 게임을 만드는 문제입니다. def solution(dartResult): answer = 0 idx = 0 prevNum = 0 num = 0 ten = False for i in range(len(dartResult)): if dartResult[i].isdigit(): if ten == True: continue idx = 0 if dartResult[i+1] == '0': ten = True # 중첩스타상 당할 수 있음으로 prevNum을 더함 answer += prevNum prevNum = num if ten == True: num..
dp 문제입니다. 증가하는 부분 수열이 여러 개 나올 수 있습니다. 특히, 어떤 인덱스에 이전에 존재하던 증가하는 부분 수열보다 작은 수가 등장한 이후로 이전에 존재하던 증가하는 부분 수열보다는 작지만 계속해서 증가를 하는 수열이 나온다면? 가장 긴 증가하는 부분 수열은 갑자기 등장한 수부터 시작하는 증가하는 부분 수열이 될 것입니다. 그렇기에 이각 항마다 가장 긴 증가하는 부분 수열의 길이를 저장해 답을 구합시다. 보다 이해를 돕기 위해 수열 {5, 10, 3, 30, 5, 7, 20} 을 예로 들어보겠습니다. d[i]는 i항에서 가장 긴 증가하는 부분 수열의 길이입니다. d[1] = 1 | {5} 입니다. d[2] = 2 | {5, 10} 입니다. d[3] = 1 | {3} 입니다. d[4] = 3 ..
programmers.co.kr/learn/courses/30/lessons/42883 반복마다 허용 가능한 범위로 문자열을 잘라 그 범위 내에서 가장 큰 수를 구해 answer에 이어붙이며, 방금 구한 큰 수의 다음 인덱스 자리수부터 다시 큰 수를 찾는 식으로 답을 구했습니다. 이해를 돕고자 1829라는 숫자로 2자리 수의 가장 큰 수를 만드는 예시를 들어볼게요. 처음에는 182까지, 즉 [:-1] 까지의 수를 확인해야 합니다. 끝자리까지 검사해서 9를 max값으로 잡아버린다면 그 다음 자리수를 못 구하기 때문이에요. 이러한 방식으로 처음에 코딩을 했는데 테스트케이스 8번에서 틀리고, 10번에서 시간초과가 나서 고생했습니다. 테스트케이스 10번 시간초과 해결하기 일단 위에 기술한 방법이 O(N)이기에 ..