Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 우선순위 큐
- 에라토스테네스의체
- BFS
- 다이나믹프로그래밍
- 터렛
- SWEA
- 투포인터
- 스도쿠 검증
- 브루트포스
- Flatten
- 간단한 369게임
- 완전탐색
- boj
- N-Queen
- D2
- firebase
- 다리놓기
- 나는야 포켓몬 마스터 이다솜
- 이분탐색
- 배포
- 그리디 알고리즘
- 백만 장자 프로젝트
- 해시맵
- LRU
- dfs
- 플루이드-워셜
- D3
- 좌표 정렬하기
- 최단경로
- 회의실 배정
Archives
- Today
- Total
허비의 기술블로그
[SWEA] Flatten(1208) - PYTHON 본문
상자가 쌓인 층들이 나열된 1차원 배열과 상자를 옮길 수 있는 횟수를 입력받아, 평탄화를 진행했을 때 최고 높이와 최저 높이의 차이를 반환하는 문제이다.
시간복잡도: O(상자 배열 길이 * 상자 옮기는 횟수)
풀이과정
매번 상자를 옮기는 과정에 있어서, 가장 높이 쌓여있는 값과 가장 낮게 쌓여있는 값을 찾은 다음에 최댓값에서 1을 빼고 최솟값에 1을 더해서 평탄화를 진행한다.
최댓값, 최솟값을 가진 위치를 찾는 과정에서 값을 변경함에 따라 최소, 최댓값이 바뀔 수 있으므로, index를 먼저 구해놓는다.
주어진 변경 가능 횟수 내에 작업이 종료될 수 있지만, 끝까지 진행해도 결괏값이 달라지지 않으므로 로직을 추가하지 않았다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
N = 10
for i in range(1, N + 1):
M = int(input())
arr = list(map(int, input().split()))
for j in range(M):
maxVal = max(arr)
minVal = min(arr)
minIdx = arr.index(minVal)
maxIdx = arr.index(maxVal)
arr[minIdx] += 1
arr[maxIdx] -= 1
answer = max(arr) - min(arr)
print("#", i, " ", answer, sep='')
|
cs |
주석 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
|
N = 10 #TC 개수
for i in range(1, N + 1):
M = int(input()) # 상자 이동 가능 횟수
arr = list(map(int, input().split())) # 상자 배열
for j in range(M): # 상자 이동 가능 횟수 동안
maxVal = max(arr) # 최댓값
minVal = min(arr) # 최솟값
minIdx = arr.index(minVal) # 최솟값 idx
maxIdx = arr.index(maxVal) # 최댓값 idx
arr[minIdx] += 1 # 최댓값 idx의 값에서 1 빼기
arr[maxIdx] -= 1 # 최소값 idx의 값에서 1 더하기
answer = max(arr) - min(arr) # 최댓값 - 최소값을 출력 결과로
print("#", i, " ", answer, sep='')
|
cs |
'SWEA' 카테고리의 다른 글
[SWEA] VIEW(1206) - PYTHON (0) | 2022.05.01 |
---|---|
[SWEA] 스도쿠 검증(1974) - PYTHON (0) | 2022.04.30 |
[SWEA] 간단한 369게임(1926) - PYTHON (0) | 2022.04.30 |
[SWEA] 백만 장자 프로젝트(1859) - PYTHON (0) | 2022.04.30 |
Comments