반응형
처음 접근해본 풀이 방법으로
분할과 정복 문제는 처음 배울때 재귀로 배웠어서 아래와 같이 접근했는데
아직 알고리즘을 쉽게 푸는 방식에 대해 깨닫지 못했는지 코드도 길고 시간도 꽤나 걸렸다.
def CTP(li):
global k, n
if len(li) == 1: return li
mid = len(li)//2
left, right = CTP(li[:mid]), CTP(li[mid:])
if k == n//mid: result.append(left+right)
return sorted(left+right)
import sys
input = sys.stdin.readline
n = int(input())
li = list(map(int,input().split()))
k = int(input())
result = []
if k == n: print(*li)
elif k == 1: print(*sorted(li))
else:
CTP(li)
for i in result: print(*i, end=' ')
그래서 재귀로 말고 그냥 단순히 반복문을 활용해서 풀었는데 훨씬 쉬웠다.
반복문에서는 끝까지 찍고 오는 분할과 정복 과정에서
단순히 인원 수에 맞게 슬라이싱 하고 정렬하여 출력하는 식으로 풀었음.
import sys
input = sys.stdin.readline
n = int(input())
li = list(map(int,input().split()))
k = int(input())
idx = n//k
for i in range(0, n, idx): print(*sorted(li[i:i+idx]), end=' ')
'알고리즘' 카테고리의 다른 글
[백준, 2178번] 미로 탐색 (0) | 2023.08.13 |
---|---|
[백준, 12865번] 평범한 배낭 - 냅색 알고리즘 (1) | 2023.08.11 |
[SWEA, 탐욕 알고리즘] 화물 도크 (0) | 2023.08.09 |
[SWEA, 탐욕 알고리즘] 컨테이너 운반 (0) | 2023.08.09 |
[SWEA, 완전 검색] 전자카트 (0) | 2023.08.08 |