프로그래머스60 [프로그래머스] 괄호 변환 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 주어진 문자열을 계속하여 분할하면서 재귀적 호출이 필요하여 함수를 만들어 접근하였습니다. 2) 알고리즘 재귀 구현 3) 풀이 코드 사용 언어 - Python def solution(p): # 올바른 괄호 문자열인지 판별 def is_right(s): stack = [] # 괄호를 쌓아놓 리스트 for c in s: if c == '(': # 현재 괄호가 여는 괄호라면 stack.append('(') # 리스트에 저장 elif not stack: # 닫는 괄호인데, 이전에 여는 괄호가 없었다면 return False # 올바른 괄호가 아님 elif stack[-1] == '(': # 현재 괄호가 닫는 괄호인데, 바로 이전 괄호가 여는 괄호였으면 stac.. 2022. 3. 10. [프로그래머스] 기둥과 보 설치 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 초기에 2차원 배열을 생성하여 구조물을 설치하려 하였습니다. 그리하여 설치 또는 제거시 구조물들이 모든 조건에 해당하는지 확인하려 하였으나, 조건이 너무 까다로워 어려움을 겪었습니다. 조금 더 간단한 방법을 생각하여 집합을 이용하여 설치한 구조물들만 반복하며 조건을 확인하도록 하였습니다. 2) 알고리즘 구현 3) 풀이 코드 사용 언어 - Python def solution(n, build_frame): built = set() def is_right(): for b in built: # 모든 구조물 탐색 x, y, a = b # x, y 좌표, a-0: 기둥, 1: 보 if not a: # 현재 구조물이 기둥이라면 if y and (x, y-1, 0).. 2022. 3. 7. [프로그래머스] n진수 게임 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 튜브가 몇번째 순서일때마다 말을 해야하는지 순서를 구해주었습니다. 숫자들을 n진수로 변화하여 사람들이 외칠 한자리씩 나누어 리스트에 저장하였습니다. 2) 풀이 코드 사용 언어 - Python from collections import deque def solution(n, t, m, p): # 변경해야할 진법, 구해야할 정답의 개수, 게임 참여 인원, 튜브의 순서 answer = [] # 정답 리스트 turns = [] # 튜브가 말해야할 순서 converted = ['0'] # 변경된 진법이 한자리씩 저장되는 리스트 def convert(num): # 변환 함수 result = deque() while num > 0: # 0보다 크다면 if num%.. 2022. 3. 6. [프로그래머스] 메뉴 리뉴얼 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 손님들이 주문한 2번 이상 주문한 메뉴들을 조합으로 만들어 풀어야 했으므로, 손님에게 주문받은 주문들을 이용하여 조합을 구하여 가장 많은 선택을 받은 조합들을 구했습니다. 2) 알고리즘 문자열 3) 풀이 코드 사용 언어 - Python from itertools import combinations def solution(orders, course): answer = [] # 정답 리스트 li_orders = [] # 손님들이 주문한 메뉴들이 문자열로 들어와서, 메뉴 하나씩 나누어 하나의 리스트에 담음 combs = set() # 나올 수 있는 메뉴 조합들 max_cnt = [0] * (max(course)+1) # 메뉴 개수별로 나올수 있는 조합들 중.. 2022. 3. 5. [프로그래머스] k진수에서 소수 개수 구하기 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 주어진 숫자를 조건에 맞는 진수로 변환해주었고, 변환된 숫자에서 주어진 조건에 맞는 숫자들을 추출하였습니다. 소수 판별을 위해 에라토스테네스의 체를 이용하였으나 메모리 초과 문제로 각 숫자들을 하나씩 소수 판별을 해주었습니다. 2) 풀이 코드 사용 언어 - Python def solution(n, k): nums = [] # 진수 변환 후 조건에 맞는 숫자 리스트 prime_number = {} # 이미 소수 여부를 확인한 숫자들 answer = 0 # 정답 def trans(num): # 진수로 변환해주는 함수 result = 0 # 변환된 숫자 idx = 0 # 자릿수 while num > 0: result += (num%k) * (10**idx).. 2022. 2. 28. [프로그래머스] 주차 요금 계산 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 입력으로 주어진 시간을 분으로 수정하여 딕셔너리에서 입차와 출차를 관리하였고, 누적 시간을 저장하였습니다. 마지막에 이 누적시간에 따라 요금을 계산하였습니다. 2) 알고리즘 문자열 3) 풀이 코드 사용 언어 - Python from math import ceil def solution(fees, records): base_time, base_cost, per_time, per_cost = fees # 기본 시간(분), 기본 요금(원), 단위 시간(분), 단위 요금(원) answer = [] # 정답 리스트 parking = {} # 주차장에 차량이 있는지 없는지 여부, 키: 차량 번호, 값: 입차 시간 times = {} # 차량별 주차장 이용 누적시.. 2022. 2. 25. [프로그래머스] 징검다리 건너기 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 초기에 단순하게 이중반복문을 이용하여 모든 디딤돌을 탐색하는데, 하나의 디딤돌을 기준으로 k개만큼의 디딤돌을 확인하여 몇명이 지나가면 더 지나갈 수 없는지 확인하였습니다. 그러나 이중반복문이기에 시간초과가 발생하였습니다. 시간 초과를 해결하기 위하여 이분탐색을 이용하여 건너는 인원의 수를 구하는 방법으로 접근하였습니다. 2) 알고리즘 이분탐색 3) 풀이 코드 사용 언어 - Python def solution(stones, k): low, high = 0, max(stones) # 건널 수 있는 인원의 최솟값, 최댓값 answer = 0 # 건널 수 있는 인원 while low = k: # k거리 만큼 벌어지면 종료 break else: # 건널 수 있.. 2022. 2. 23. [프로그래머스] 광고 삽입 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 초기에 모든 구현을 하는 방식으로 접근하였습니다. 그러나 변수의 범위가 매우 넓어 시간초과가 발생하였습니다. 이후에 시간 단축을 위하여 고민하던 중 시청자가 몇명인지에 따라 결과가 달라지기 때문에 누적합을 이용하여 풀이를 할 수 있다고 생각하여 접근했습니다. 2) 알고리즘 누적합 3) 풀이 코드 사용 언어 - Python def solution(play_time, adv_time, logs): def time_to_seconds(s): # 문자열 시간을 초로 바꾸어 주는 함수 return int(s[:2]) * 3600 + int(s[3:5]) * 60 + int(s[6:8]) play_time_seconds = time_to_seconds(play_.. 2022. 2. 22. [프로그래머스] 경주로 건설 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 초기에 DFS 를 재귀로 탐색하여 모든 경우를 탐색을 시도하였으나, 시간초과로 통과하지 못하였습니다. 그래서 BFS 탐색을 하며 DP를 이용하는 방식으로 접근하였습니다. 2) 알고리즘 BFS DP 3) 풀이 코드 사용 언어 - Python from collections import deque def solution(board): dr = [-1, 0, 1, 0] # 상 우 하 좌 dc = [0, 1, 0, -1] N = len(board) # 보드판의 길이 cost = [[1e10] * N for _ in range(N)] # 각 좌표로 이동하는데 발생하는 비용 def BFS(): q = deque([(0, 0, 0, -1)]) # 행 열 좌표, 해당.. 2022. 2. 21. [프로그래머스] 합승 택시 요금 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 최소 요금을 구해야 하므로 다익스트라를 이용하였습니다. 출발지에서 각 지점으로 최소 요금으로 갈 수 있는 값을 구하였습니다. 그 이후 각 지점에서 a, b 지점으로 이동하는 요금을 구하여 비교하였습니다. 2) 알고리즘 다익스트라 3) 풀이 코드 사용 언어 - Python import heapq def solution(n, s, a, b, fares): answer = 0 # 최소 요금 linked = [[] for _ in range(n+1)] # 도로 정보들 start_distance = [] # 시작 지점에서 각 지점으로 이동하는데 필요한 요금 for fare in fares: # 양방향으로 도로 정보를 저장함 linked[fare[0]].appe.. 2022. 2. 20. [프로그래머스] 추석 트래픽 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 입력으로 주어진 문자열을 가공하여 요청 시작 시간과 응답하는 시간을 ms 단위로 변환시켰습니다. 딕셔너리 변수를 이용하여 키값을 ms 시간으로 하여 처리하는 요청의 최대 개수를 구하였습니다. 2) 알고리즘 문자열 3) 풀이 코드 사용 언어 - Python def solution(lines): answer = 0 # 초당 최대 처리량 cnt = 0 # 특정 시간대 처리량 time_line = {} # 시간 테이블 - 키: 시간(ms) / 값: 시작 또는 완료 여부 (-1, 1) for line in lines: # 로그 데이터 date, time, duration = line.split(' ') # 날짜, 시간, 처리 시간 end_ms = int(tim.. 2022. 2. 18. [프로그래머스] 표 편집 📖 문제 🧑🏻💻 풀이 과정 1) 문제 이해 및 접근 표의 각 행을 가르키는 커서를 이리저리 움직이며 행을 삭제하거나, 삭제한 행을 원위치로 복구를 하게 되는데, 단순 리스트 구현시 각 요소들의 이동이 무수히 많아질 수 있으므로, 이중연결 리스트를 이용하였습니다. 2) 알고리즘 이중연결 리스트 3) 풀이 코드 사용 언어 - Python def solution(n, k, cmds): answer = [] # 행 삭제 여부를 저장할 정답 리스트 history = [] # 삭제된 행이 저장될 스택 table = [] # 연결 리스트 def create_item(idx): # 연결 리스트 초기 생성 item = [[idx-1, -1], idx] # [이전 인덱스, 이후 인덱스], 현재 인덱스(데이터) if id.. 2022. 2. 17. 이전 1 2 3 4 5 다음