코딩테스트/SWEA

[SW Expert Academy][D3][python]1208. [S/W 문제해결 기본] 1일차 - Flatten

코린영이 2023. 5. 18. 14:03
728x90
반응형

코딩테스트 문제 푸는 방향
1. 문제를 정독한다. 정독하면서 손으로 한 번 풀어본다.
2. 접근 방법을 구상한다.
3. 핵심 코드를 시각적으로 보이도록 손코딩한다. 
4. 코드를 구현한다. 
5. 디버깅 및 개선을 한다.
6. 부분 정답이 나올 시 1번으로 돌아가 더 꼼꼼하게 읽어보고 다른 접근 방법은 없는지 생각해본다. 

1208. [S/W 문제해결 기본] 1일차 - Flatten

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV139KOaABgCFAYh&categoryId=AV139KOaABgCFAYh&categoryType=CODE&problemTitle=%EB%AC%B8%EC%A0%9C%ED%95%B4%EA%B2%B0&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=3&pageSize=10&pageIndex=2 

 

SW Expert Academy

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

swexpertacademy.com

 

평탄화 작업에 제한이 걸려있을 때 최고점과 최저점의 차이를 출력하면 된다.

맨 처음 이런 식으로 상자가 쌓여있다.

첫 번째 평탄화 작업으로 제일 높은 상자가 쌓여있는 A에서 한 개를 빼 B로 옮겨준다.

두 번째 평탄화 작업으로는 가장 높은 상자가 쌓여있는 A에서 가장 적은 상자가 쌓여있는 C로 옮겨주면 된다.

 

 

[제약 사항]

1. 가로 길이는 항상 100

2. 테스트 케이스는 항상 10

3. 덤프 횟수는 1이상 1000이하

4. 모든 상자의 높이는 1이상 100이하

5. 주어진 덤프 횟수 이내 평탄화가 완료되면 더 이상 덤프를 수행할 수 없으므로 그 때의 최고점과 최저점의 높이 차를 반환한다.

 

[문제 해결 방향]

for문으로 덤프 횟수동안 최고 숫자는 -1을 해주고 최저 숫자는 +1을 해주면 될 것 같다.

 

그리고 if문으로 덤프 횟수 이내에 완료되면 for문을 빠져나가도록 설정해준다.

 

 

[파이썬 코드]

T = 10
for test_case in range(1, T+1):
    N = int(input()) #  덤프횟수
    box = list(map(int,input().split())) # 100개의 상자 높이들을 입력받음 
    for i in range(N):
        max_box = max(box)
        max_index = box.index(max(box))
        box[max_index] = max_box - 1
        min_box = min(box)
        min_index = box.index(min(box))
        box[min_index] = min_box + 1
        if max(box) - min(box) <= 1:
            break
        else:
            continue
    
    print('#{} {}'.format(test_case,max(box)-min(box)))

 

 

[느낀점]

점점,, ,발전하는 너낌쓰?

고등학교때 수학문제 풀었던 느낌이 난다ㅏ재미쓰~~

 

 

728x90
반응형