본문 바로가기

코딩테스트63

[파이썬] JadenCase 문자열 만들기 [CODING TEST #56] https://school.programmers.co.kr/learn/courses/30/lessons/12951 처음엔 여백을 기준으로 split하여 첫 글자만 check하려 했으나, 공백문자가 여러 개인 경우와 마지막이 공백으로 끝나는 경우 등을 처리하지 못하여 enumerate를 이용했다. 해당 문자가 단어의 첫 글자인지 check하는 방법은 idx==0 or s[idx-1] == ' ' 이다. 첫 글자이거나 이전 글자가 공백이면 단어의 첫 글자가 된다. 첫 글자일 경우 대문자로 추가하고, 이외의 문자들은 소문자로 추가하도록 하면 된다. def solution(s): answer = '' # 각 단어의 첫 알파벳만 check하고, 이후 단어들은 lower 처리. for idx, alpha in en.. 2022. 8. 17.
[파이썬] 더 맵게 - 힙(Heap) [CODING TEST #54] https://school.programmers.co.kr/learn/courses/30/lessons/42626 heapq 모듈로 힙을 만들어서 구현했다. scoville 리스트를 최소 힙으로 만들고 최솟값이 K 이상이 될 때까지 섞기를 반복했다. import heapq def solution(scoville, K): answer = 0 heapq.heapify(scoville) # minheap while scoville[0] < K : # 최솟값이 K보다 작을 때 if len(scoville) == 1: # -1 조건 return -1 min_1 = heapq.heappop(scoville) min_2 = heapq.heappop(scoville) heapq.heappush(scoville,min_.. 2022. 8. 16.
[파이썬] 영어 끝말잇기 - Summer/Winter Coding(~2018) [CODING TEST #53] https://school.programmers.co.kr/learn/courses/30/lessons/12981 끝말잇기가 틀린 걸 check하고, 해당 순서가 누구의 몇 번째 턴인지를 구하는 문제이다. 누가 틀렸는지는 나머지 연산 %를 이용한다. 나누어 떨어질 때를 제외하고는 모두 나눈 나머지가 그 차례가 된다. (ex : 5 % 3 ==> 2번째 사람) 나누어 떨어질 때, 6 % 3 == 0일 때에만 n을 집어넣는다. 몇 번째 턴인지는 몫연산자 //를 이용한다. n으로 나누어야 하는데, 전체 순서에서 1을 빼준 뒤 n으로 나누어야 한다. 예를 들어 n이 5일 때 6~10은 모두 같은 2번째 턴이 되는데, 10 // 5만 2가 나오기 때문이다. 따라서 (order - 1 // n) + 1 처럼, 순서.. 2022. 8. 13.
[파이썬] 최댓값과 최솟값 [CODING TEST #52] https://school.programmers.co.kr/learn/courses/30/lessons/12939 def solution(s): answer = '' nums = s.split(' ') my_max, my_min = '-987654321', '987654321' for num in nums: if int(num) int(my_max): my_max = num answer += my_min + ' ' + my_max return 2022. 8. 12.
[파이썬] 게임 맵 최단거리 [CODING TEST #51] https://school.programmers.co.kr/learn/courses/30/lessons/1844 (0,0)에서 (n-1,m-1) 까지의 최소 거리를 반환하거나 도달하지 못하면 -1을 return BFS로 간단하게 풀 수 있었다. 그런데 효율성 테스트에서 계속 실패했는데, 한 번 방문한 곳을 다시 방문하지 못하게 하기 위해 visited = True를 큐에서 뺄 때가 아니라, 넣을 때 해야 한다. 큐에서 뺄 때 방문 체크를 하면 BFS 특성 상 하나의 노드가 여러번 돌아갈 수 있기 때문이다. 프로그래머스 질문 탭에서 발견한 너무나도 좋은 내용이었다. 감사합니다. from collections import deque def solution(maps): INF = 987654321 answer.. 2022. 8. 11.
[파이썬] 올바른 괄호 [CODING TEST #50] https://school.programmers.co.kr/learn/courses/30/lessons/12909 괄호 회전하기의 간단한 유형이다. Stack을 이용. def solution(s): answer = True gwalho_list = [] for gwalho in s: if gwalho == '(': gwalho_list.append(gwalho) elif gwalho == ')' and len(gwalho_list) > 0: gwalho_list.pop() else: return False if len(gwalho_list) > 0: return False return True 2022. 8. 11.
[파이썬] 조이스틱 [CODING TEST #49] https://school.programmers.co.kr/learn/courses/30/lessons/42860# 처음엔 간단한 문제인 줄 알았으나... 테스트 케이스에서 절반을 틀렸다. 알파벳을 바꾸는 위,아래 조작은 아스키 코드로 바꾸는 ord() 함수를 이용하여 쉽게 구현할 수 있다. 역시나 문제는 커서를 이동시키는 좌우 조작이었다. 나의 아이디어는 첫 번째 글자와 인접한 가장 긴 'A'가 있는 반대 방향으로 쭉 가는 것이었다. 그런데 여러 테스트 케이스를 살펴보니 오른쪽으로 갔다가 다시 왼쪽으로 돌아가는 방법이 최단 거리가 되는 케이스가 있었다. 젠장할 어떻게 하지.. 해서 찾아보다가 정말 좋은 아이디어를 인터넷에서 봤다. 문자열 중간에 가장 긴 'A'로 연속된 것을 찾고, 그 'AAA...AA.. 2022. 8. 9.
[파이썬] 경주로 건설 - 2020 카카오 인턴십 [CODING TEST #48] https://school.programmers.co.kr/learn/courses/30/lessons/67259 BFS를 이용하여 인접 노드로 이동했을 때의 최소 비용을 저장한다. 인접 노드로 나아갈 때 board 외부가 아닌지, 벽이 아닌지를 먼저 따지고 갈 수 있다면 현재 비용에다가 나아갈 길이 코너, 직진인지를 따져 비용을 계산한다. 계산된 비용이 이미 최솟값으로 저장되어 있던 비용보다 작으면, 갱신하고 그 위치를 다시 큐에 저장한다! from collections import deque def solution(board): def bfs(start): direc = {0:[-1, 0], 1:[0, 1], 2:[1, 0], 3:[0, -1]} # 북,동,남,서 순서 length = len(boar.. 2022. 8. 9.
[파이썬] 수박수박수박수박수박수? [CODING TEST #46] https://school.programmers.co.kr/learn/courses/30/lessons/12922 def solution(n): answer = '' for i in range(n): if i%2 == 0 : answer += '수' else : answer += '박' return answer 2022. 8. 8.
728x90