Gaegul's devlog

[SWEA] 1208. Flatten 본문

Algorithm/Algorithm 풀이

[SWEA] 1208. Flatten

부지런깨꾹이 2021. 8. 11. 14:30
728x90
반응형

SW Expert Academy [S/W 문제해결 기본] 시리즈

1208. Flatten

 

[문제]

가장 높은 곳에 있는 상자를 가장 낮은 곳으로 옮기는 작업을 덤프라고 정의한다. 평탄화 작업을 위해서 상자를 옮기는 작업 횟수에 제한이 걸려있을 때, 제한된 횟수만큼 옮기는 작업을 한 후 최고점과 최저점의 차이를 반환하는 프로그램을 작성하시오.

A’부분의 상자를 옮겨서, C부분에 덤프하였다. 이때 C 대신 C’부분에 덤프해도 무방하다.

2회의 덤프 후, 최고점과 최저점의 차이는 8 – 2 = 6 이 되었다 (최초덤프 이전에는 9 – 1 = 8 이었다).

덤프 횟수가 2회로 제한된다면, 이 예시 문제의 정답은 6이 된다.



[제약 사항]


가로 길이는 항상 100으로 주어진다.

모든 위치에서 상자의 높이는 1이상 100이하로 주어진다.

덤프 횟수는 1이상 1000이하로 주어진다.

주어진 덤프 횟수 이내에 평탄화가 완료되면 더 이상 덤프를 수행할 수 없으므로 그 때의 최고점과 최저점의 높이 차를 반환한다 (주어진 data에 따라 0 또는 1이 된다).


[입력]


총 10개의 테스트 케이스가 주어지며, 각 테스트 케이스의 첫 번째 줄에는 덤프 횟수가 주어진다. 그리고 다음 줄에 각 상자의 높이값이 주어진다.

[출력]


#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 최고점과 최저점의 높이 차를 출력한다.


[CODE]

#1208. Flatten

for i in range(1,11): # 테스트 케이스 10번
    dump = int(input()) # 덤프 횟수 (1 ~ 1000이하) #2번
    box = list(map(int, input().split())) # 0~100까지
    cnt = 0
    for _ in range(dump):
        box = sorted(box) #오름차순 정렬 (0번 인덱스 : 최소값, n번 인덱스 : 최댓값)
        box[-1] = box[-1]-1 
        box[0] = box[0]+1
        
    diff = max(box) - min(box)
    print("#{0} {1}".format(i, diff))

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh&categoryId=AV139KOaABgCFAYh&categoryType=CODE&problemTitle=s%2Fw&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=5

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

⭐️ Solution

1. Sorted를 이용해서 리스트 요소들 올림 차순으로 정렬.

2. 리스트 0번째 인덱스 요소와 마지막 요소는 최소값과 최댓값으로 정렬되어 있을 것임. 두 요소 값만 변경해줌

3. 최종적으로 가장 큰 요소 값과 가장 작은 요소 값의 차이 구해줌.

 

 

728x90
반응형

'Algorithm > Algorithm 풀이' 카테고리의 다른 글

[SWEA] 1213. String  (0) 2021.08.21
[SWEA] 1210. Ladder1  (0) 2021.08.21
[SWEA] 1209. Sum  (0) 2021.08.21
[SWEA] 1206. View  (0) 2021.08.11
[SWEA] 1204. 최빈수 구하기  (0) 2021.08.11
Comments