Processing math: 0%

코테 오답노트 13

[프로그래머스] 올바른 괄호 (파이썬, 시간초과- 리스트 대신 디큐)

[문제] 문제 설명괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다.예를 들어- "()()" 또는 "(())()" 는 올바른 괄호입니다.- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.제한사항- 문자열 s의 길이 : 100,000 이하의 자연수- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다. 입출력 예sanswer"()()"true"(())()"true")()("false"(()("false  [내 풀이]처음 풀..

코테 오답노트 2025.03.27

[프로그래머스] 유연근무제 (파이썬, 테케 생각 잘한 게 뿌듯해서 기록함)

[문제]7일 중 평일에 직원이 스스로 설정한 시간 안에 잘 출근을 했는지 확인하는 문제였다.  [내 코드]내 코드는 아래와 같다.1. 토, 일 기록을 아예 제외해주고 (예외: startday가 7인 경우)2. 커트라인 시간을 설정해주고 (예외: schedules의 분단위가 50~59인 경우)3. 각 직원별로 만족여부를 판별해줬다.def solution(schedules, timelogs, startday): answer = 0 for i in range(len(schedules)): # 토,일 기록 제외 if startday == 7: timelogs[i].pop(6) timelogs[i].pop(0) else: ..

코테 오답노트 2025.03.21

[프로그래머스] 지폐 접기 (파이썬, 예시 테게에 없는 테케도 생각하기)

[문제]지폐를 몇 번 접어야 지갑에 들어가는지를 구하는 문제였다.  [내 코드]처음 내 코드이다.Bill의 최댓값을 2로 나눈 몫과 bill의 최솟값을 bill로 설정하고 answer(횟수)를 1 올려줬다.만약에 bill의 최댓값이 wallet의 최댓값보다 작거나 같고, bill의 최솟값이 wallet의 최촛값보다 작거나 같으면 for문을 멈추고 답을 냈다. 나름 머리를 쓴다고 range를 16으로 설정했다. Bill값이 2,000 이하니 아무리 많이 접어도 16번이기 때문이다.def solution(wallet, bill): answer = 0 for i in range(16): bill = [max(bill) // 2, min(bill)] answer += 1 ..

코테 오답노트 2025.03.18

[프로그래머스] 소수 만들기 (파이썬, 최적화)

[문제]주어진 숫자중에 3개를 더했을 때 소수가 되는 경우의 수를 세는 문제였다.   [기존 코드]숫자 3개를 뽑아서 더하고 리스트에 추가한 다음, 리스트에 있는 숫자들이 소수인지 판별해주었다.i == 3 일 때는 별도로 처리해주었다.def solution(nums): # 숫자 3개 뽑아서 더하기 t = len(nums) lst = [] for i in range(t): for j in range(i+1,t): for k in range(j+1,t): lst.append(nums[i]+nums[j]+nums[k]) # 소수 판별 answer = 0 for i in lst: ..

코테 오답노트 2025.03.14

[프로그래머스] 공원 산책 (파이썬, 예시 테케에 없는 테케도 생각하기)

[문제]격자판 안에서 장애물을 고려하면서 이동시키는 문제였다.공원 크기와 시작지점이 각각 다르게 설정되어 있었다. [내 코드]처음에 공원 크기를 잡아주고 S 위치를 파악한 다음 이동을 시켜줬다.조건이 모두 만족해야 이동하는 방법으로 코드를 구성했다.def solution(park, routes): answer = [] # 공원 크기 H = len(park)-1 W = len(park[0])-1 # 시작점 설정 i = 0 while park: # for문 써도 되었을 듯 if 'S' in park[i]: a = i b = park[i].index('S') break i += 1 ..

코테 오답노트 2025.03.12

[프로그래머스] 달리기 경주 (파이썬, 시간복잡도 개선)

[문제]callings에 등장하는 항목을 앞 항목하고 바꿔치기하는 문제였다.시간복잡도를 고려하는 게 문제의 포인트였다.   [코드]처음에는 아무 생각 없이 아래와 같이 코드를 짰다. def solution(players, callings): for i in callings: f_index = players.index(i) j = players[f_index-1] players[f_index] = j players[f_index-1] = i return players for문 안에서 i의 인덱스 찾아서 앞 항목과 바꿔치기하는 방법을 사용했다.   [왜 틀렸나]시간초과가 떴다.players의 길이가 50,000개 이하, callings의 길..

코테 오답노트 2025.03.06

[프로그래머스] 옹알이(2) (파이썬, startswith 함수)

내 풀이를 바탕으로 지피티와 함께 조금 다듬어봤다.  [문제]애기가 옹알이로 할 수 있는 말의 개수를 구하는 문제였다.아직 4가지 단어만 말 할 수 있고, 애기기 때문에 연속해서 같은 단어를 발음하지 못한다.   [코드]내 코드이다.먼저 슬라이싱으로 처리하기 위해서 2글자 단어('ye', 'ma')와 3글자 단어('aya', 'woo')가 등장했을 때의 2가지 경우로 나눴다.각 경우에서 babble의 앞 단어가 애기가 발음할 수 있는 단어이면, front_word라는 단어에 그 단어를 추가하고 babble에서 그 단어를 없애줬다. 여기서 추가한 단어가 기존의 front_word 단어와 같으면 발음할 수 없으므로 break.babble의 앞단어가 애기가 발음할 수 없는 단어여도 바로 break.babble..

코테 오답노트 2025.03.04

[프로그래머스] 햄버거 만들기 (파이썬, 시간초과)

시간초과로 오류가 나서, 그리고 내 코드도 마음에 들지만 다른 사람 코드가 더 깔끔해보여서 기록해본다. [문제]애니팡 같은 문제였다. 특정 패턴이 반복되면 팡 터지고 지워져서 붙여지면 다시 팡 터지고를 반복하는 문제였다.  [코드]while로 리스트 안에서 돌면서 1231이 지워지면 i를 앞으로 당겨서 풀었다.처음에 1231이 지워진다음 i-=3로 설정하지 않고 i=0으로 설정했더니 시간초과가 떴다.i=0 으로 설정하면 배열이 길어질 경우에 앞에서부터 무의미한 반복이 일어나서임을 깨닫고 i-=3로 바꿔줬다.최대 3 인덱스 이하(123일 경우)에는 다시 지워질 가능성이 없기 때문이다.def solution(ingredient): answer = 0 i = 0 while i..

코테 오답노트 2025.03.03

[프로그래머스] 대충 만든 자판 (파이썬, enumerate함수)

[문제]대충 만든 천지인 자판으로 특정 문자열을 출력하려면 몇 번 자판을 눌러야 하는지 구하는 문제였다.  [코드]def solution(keymap, targets): answer_lst = [] apb = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lst = [0] * 26 # 각각의 알파벳에 접근할 수 있는 가장 빠른 인덱스 찾기 for key in keymap: for i in range(len(key)): if lst[apb.index(key[i])] != 0: lst[apb.index(key[i])] = min(i+1, lst[apb.index(key[i])]) else: ..

코테 오답노트 2025.02.27

[프로그래머스] 숫자 짝꿍 (파이썬, 시간복잡도 개선)

내 풀이가 나름 마음에 들어서 기록해본다. [문제]  [코드]def solution(X, Y): # X_lst, Y_lst: X, Y 숫자세기용 리스트 / lst: 겹치는 숫자세기용 리스트 X_lst, Y_lst, lst = [0] * 10, [0] * 10, [] # X, Y에 있는 숫자들의 개수 세줌 for i in X: X_lst[int(i)] += 1 for i in Y: Y_lst[int(i)] += 1 # 특정 숫자가 X, Y에 모두 들어있으면 둘 중에 적은 개수만큼 lst에 저장해줌(e.g. 55, 2) for i in range(10): if X_lst[i] != 0 and Y_lst[i] != 0:..

코테 오답노트 2025.02.26