알고리즘 연습 674

[Lv.2 / 프로그래머스 / 파이썬] 모음사전

프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 사전 정렬 규칙에 따라 단어를 순서대로 만들었을 때, 주어진 단어의 번호를 출력해야 한다. 다음 단어를 만드는 법은 다음과 같다. 1. 'A'를 붙인다.2. 끝 글자를 다음 순서의 모음으로 교체한다. 만약 끝 글자가 U일 경우, 그 다음 순서의 모음을 교체해야 하므로, U를 제거한 뒤 다음 순서로 넘어가면 된다. def solution(word): alpha = ['A', 'E', 'I', 'O', 'U'] cur_word = 'A' cnt = 1 while cur_word != word: cnt += 1 ..

[Lv.2 / 프로그래머스 / 파이썬] 무인도 여행

프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 연결된 땅들의 크기를 계산하여 각 섬의 크기를 오름차순으로 출력하는 문제이다.DFS 및 BFS를 사용하여 해결할 수 있다. 작성된 코드의 알고리즘 순서는 다음과 같다. 맵을 탐색하며 X가 아닌 부분(섬의 일부)을 찾는다.섬의 일부를 발견한 경우, BFS로 섬 전체를 탐색한다.섬을 방문한 좌표의 경우 X로 표시로 체크하여 재방문을 막는다.섬 탐색이 끝나면 현재 섬의 크기를 저장한 다음, 맵을 이어서 탐색하며 다른 섬들을 찾는다.맵 탐색이 전부 끝나면, 저장된 섬의 크기를 오름차순 정렬한 다음 반환한다. def solution(maps): board = [..

[Lv.2 / 프로그래머스 / 파이썬] 지게차와 크레인 (2025 프로그래머스 코드챌린지 1차 예선)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 requests를 순회하며 처리하는 시뮬레이션에서 BFS를 수행하는 문제이다. BFS를 가장자리부터 진행하도록 하기 위해 빈 값으로 storage를 래핑해주었다.그리고 주어진 요청을 순회하며 BFS 혹은 전체 삭제를 진행한다.순회가 종료되면, 남은 블럭의 개수를 리턴한다. BFS를 진행할 때, 현재 요청 타입에 맞는 블럭과 만났을 때 즉시 삭제하지 않도록 따로 삭제 예정 리스트를 구성한 다음 처리해야 한다. 그렇지 않으면 같은 타입의 블럭 뭉치를 만났을 때, 연결된 모든 부분을 삭제하게 된다. def solution(storage, requests)..

[Lv.2 / 프로그래머스 / 파이썬] 귤 고르기

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 귤의 크기별로 그 개수를 센 딕셔너리를 구성한다.그리고 개수를 기준으로 내림차순 정렬한다.개수가 가장 많은 종류부터 선택하여 k에서 선택한 종류의 개수를 뺀다.k가 남았다면 3번을, k가 0이거나 음수가 되면 목표치를 달성한 것이므로 지금까지 선택한 종류의 수를 return 한다. def solution(k, tangerine): # 딕셔너리 구성 d = dict() for i in tangerine: if i in d: d[i] += 1 else: d[i] = 1 ..

[Lv.2 / 프로그래머스 / 파이썬] 비밀 코드 해독 (2025 프로그래머스 코드챌린지 1차 예선)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  풀이 1부터 n까지 5개의 숫자로 만들 수 있는 정수 조합들을 모두 탐색하며 해결해야 하는 문제이다.조합을 만든 뒤, q랑 비교해보며 ans 와 같은 결과가 나오는 조합이면 비밀 코드에 해당된다. itertools를 활용하면 조합을 보다 쉽게 생성할 수 있다. import itertoolsdef solution(n, q, ans): # 배열의 전체 조합 arrs = itertools.combinations([i for i in range(1, n+1)], 5) # 배열을 순회하며 탐색 res = 0 for arr in a..

[Lv.1 / 프로그래머스 / 파이썬] 유연근무제 (2025 프로그래머스 코드챌린지 1차 예선)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 시간 체크를 쉽게 하기 위해 모든 시간을 분으로 바꿔 계산하도록 한다.또한 요일 체크를 쉽게 하기 위해 나머지 연산을 사용하면 좋다. def solution(schedules, timelogs, startday): result = 0 # 직원 순회 for i in range(len(schedules)): schedule = convert(schedules[i]) + 10 timelog = timelogs[i] cur_day = startday - 1 # 출근 기록 ..

[Lv.1 / 프로그래머스 / 파이썬] 택배 상자 꺼내기 (2025 프로그래머스 코드챌린지 2차 예선)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  풀이 주어진 조건대로 상자를 쌓은 뒤, 해당 지점에서부터 몇 층의 박스가 쌓여있는지 확인하면 된다. def solution(n, w, num): # 박스 정리 MAX_ROW = n//w+1 boxes = [] for row in range(MAX_ROW): boxes.append([row*w + i if row*w + i = MAX_ROW: return res if boxes[r][c] == 0: return res

[Lv.2 / 프로그래머스 / 파이썬] 충돌위험 찾기 (PCCP 기출문제 3번)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  풀이 딕셔너리를 이용하여 해결 가능한 시뮬레이션 구현 문제이다. 문제 풀이 시 특별하게 필요한 알고리즘은 존재하지 않으나, 주어진 조건에 맞게 정확하게 구현해야 한다. def solution(points, routes): # 번호별로 좌표를 map에 담음 point_map = dict() for i in range(len(points)): point_map[i+1] = points[i] robots = [] for route in routes: start_x, start_y = point_map...

[Lv.1 / 프로그래머스 / 파이썬] 데이터 분석 (PCCE 기출문제 10번)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  풀이 리스트에 담겨 있는 자료를 조건에 따라 적절히 필터링하고, 정렬하여 출력하는 문제이다. sort 함수의 key 파라미터로 람다 함수를 넘겨 보다 쉽게 정렬할 수 있다. def solution(data, ext, val_ext, sort_by): idx = ["code", "date", "maximum", "remain"] data = [d for d in data if d[idx.index(ext)]

[Lv.1 / 프로그래머스 / 파이썬] 동영상 재생기 (PCCP 기출문제 1번)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 문자열로 주어진 모든 시간을 초 단위로 환산한 뒤, 계산이 전부 끝난 다음 다시 원래 포맷으로 변환시켜주는 방법을 사용하면 구현이 보다 편하다. 다시 문자열로 치환할 때 분 혹은 초 단위가 10 미만일 때에도 두 자리수로 표현해야 함에 유의해야 한다.그리고 사용자의 입력 타이밍과 상관 없이 현재 시간이 오프닝 사이에 위치하게 되면 오프닝의 끝으로 이동하게 된다. 따라서 사용자 입력 전후로 체크해주도록 하자. def solution(video_len, pos, op_start, op_end, commands): # 전부 초 단위로 치환 vid..

반응형