반응형
https://level.goorm.io/exam/47881/%EA%B7%BC%EB%AC%B5%EC%9E%90%ED%9D%91/quiz/1
구름LEVEL
코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이외에 여러 가지 프로그래밍 언어로 풀이할 수 있습니다.
level.goorm.io

첫 번째 변환을 하는 장소가 어디인지에 따라 결과값이 달라진다.
문제 예시의 경우, [2,3,1]을 고를 수도 있고 [3,1,4]를 고를 수도 있으며, 배열이 길어지면 이 선택에 따라 변환 횟수가 달라질 수 있음.
1. 배열에서 가장 작은 숫자의 index를 찾는다.
2. 해당 index를 포함한 채 고를 수 있는 배열의 start지점 / end지점을 분리한다.
3. k개 중 하나는 반드시 '가장 작은 숫자'이므로, k-1로 나눈 몫과 나머지를 구한다. 나머지가 0이 아닐 경우, 변환을 한 번 더 해줘야 한다.
4. 모든 배열 경우의 수마다 반환되는 횟수 중 최솟값을 찾는다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
import math | |
n, k = map(int, sys.stdin.readline().split()) | |
arr = list(map(int, sys.stdin.readline().split())) | |
answer = math.inf | |
# 가장 작은 숫자가 맨 앞일 때... 맨 뒤일 때까지. | |
start_idx = arr.index(min(arr)) | |
for i in range(k): | |
cnt = 1 | |
front, back = arr[:start_idx-i], arr[start_idx+k-i:] | |
front_cnt = len(front) // (k-1) + (1 if len(front) % (k-1) else 0) | |
back_cnt = len(back) // (k-1) + (1 if len(back) % (k-1) else 0) | |
answer = min(answer, cnt + front_cnt + back_cnt) | |
print(answer) |
반응형
'프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[Python] 구름. 개구리 2 (0) | 2020.04.29 |
---|---|
[Python] 구름. 소수 고리 (1) | 2020.04.28 |
[Python] 프로그래머스. 서울에서 경산까지 (Level 4) (0) | 2020.04.23 |
[Python] 백준 17143. 낚시왕 (0) | 2020.04.10 |
[Python] 프로그래머스. 2019 카카오 겨울 인턴 recruit - 징검다리 건너기 (Level 3) (0) | 2020.04.09 |