-
그리디 알고리즘알고리즘 (코딩테스트) 2024. 11. 7. 13:25
1. 백준 회의실배정https://www.acmicpc.net/problem/1931
- 주어진 회의 일정들을 회의실 하나에서 최대한 많이 배정하는 것이 목표
- 주요 아이디어는 빨리 끝나는 회의를 먼저 선택하는 것
- 빨리 끝나는 회의를 먼저 배정하면 남은 시간 동안 더 많은 회의를 배치할 수 있습니다.
- 따라서 종료 시간이 빠른 회의부터 배정하면, 회의가 겹치지 않으면서 최대한 많은 회의를 배정할 수 있습니다.
import sys input = sys.stdin.read def max_meetings(meetings): # 종료 시간을 기준으로 오름차순 정렬 (종료 시간이 같으면 시작 시간 기준) meetings.sort(key=lambda x: (x[1], x[0])) count = 0 last_end_time = 0 # 마지막으로 배정된 회의의 종료 시간 for start, end in meetings: # 현재 회의의 시작 시간이 마지막 회의 종료 시간 이후인 경우에만 배정 if start >= last_end_time: count += 1 last_end_time = end # 마지막 종료 시간 갱신 return count
2. 백준 폴리오미노
https://www.acmicpc.net/problem/1343
X의 연속 개수 세기가 핵심.. X를 마주쳤을때, while문을 다시 돌려서 갯수 카운팅
def polynomio(board): result = "" i = 0 n = len(board) while i < n: if board[i] == 'X': x_count = 0 # 연속된 X 개수 세기 while i < n and board[i] == 'X': x_count += 1 i += 1 # 홀수 개의 X가 있으면 -1 반환 if x_count % 2 != 0: return -1 # 짝수 개의 X 처리 # 4의 배수는 AAAA로 채우고, 나머지는 BB로 채우기 result += 'AAAA' * (x_count // 4) + 'BB' * ((x_count % 4) // 2) else: # X가 아닐 경우(즉, .일 경우) 그대로 추가 result += board[i] i += 1 return result # 입력 예시 board = input().strip() print(polynomio(board))
'알고리즘 (코딩테스트)' 카테고리의 다른 글
DFS/BFS (0) 2024.10.24 이분탐색 (0) 2024.10.22 완전탐색(Brute Force) (0) 2024.10.21 DP 실전문제 (0) 2024.10.20 DP (다이나믹 프로그래밍) 기본개념/기본문제 (0) 2024.10.17