본문 바로가기
알고리즘 풀이/SW Expert Academy

[SWEA 1208]Flatten (python)

by char_lie 2023. 2. 11.
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh 

 

SW Expert Academy

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

swexpertacademy.com

 

Flatten

높은 곳의 상자를 낮은 곳으로 옮겨 최고점 -1, 최저점 +1 의 반복을 과정하는 문제

100% 내 생각으로 풀었는가?
--> O

문제만 보면 어려워 보일 수도 있는데 조금만 생각하면 쉽게 해결할 수 있는 문제

 

내가 푼 정답 코드

def max_n(n): # 최대값 구하는 함수
    num = 0
    for i in range(len(n)):
        if num < n[i]:
            num = n[i]
    return num
 
def min_n(n): #최소값 구하는 함수
    nums = n[0]
    for i in range(len(n)):
        if nums > n[i]:
            nums = n[i]
    return nums
 
for case in range(1,11):
    dump = int(input())
    l = list(map(int, input().split()))
 
    for _ in range(dump):
        num_m = l[0] #최대값 구하기
        num_x = l[0] #최소값 구하기
        pos_min = 0 #최소값의 인덱스
        pos_max = 0 #최대값의 인덱스
        #최대값의 위치에서 1개를 빼서 최소값의 위치에 1개씩 쌓는 과정
        for i in range(100):
            if num_m < l[i]:
                num_m = l[i] 
                pos_min = i
            if num_x > l[i]:
                num_x = l[i]
                pos_max = i
        l[pos_max] += 1
        l[pos_min] -= 1
    print(f'#{case} {max_n(l)-min_n(l)}') #최종적으로 두개의 차이 반환

max, min 함수를 쓰면 더 코드 길이가 줄어 들고 가독성이 나아질 것

 

내가 푼 정답코드2

for case in range(1,11):
    dump = int(input())
    box = list(map(int, input().split()))

    for _ in range(dump):
        box_max, box_max_index = float('-inf'), 0
        box_min, box_min_index = float('inf'), 0
        for i in range(100):
            if box_max < box[i]:
                box_max = box[i]
                box_max_index = i
            if box_min > box[i]:
                box_min = box[i]
                box_min_index = i
        box[box_max_index] -= 1
        box[box_min_index] += 1
    print(f'#{case} {max(box)-min(box)}')

위에 코드를 조금 더 보기 좋게 수정하였다.


느낀점

내장함수를 못쓰게 하니 강제로 함수를 만들어 줘서 사용하고 있는데, 굳이 이럴 필요가 있나? 싶은 생각이 조금 든다.

문제 자체는 D3에 해당하는 문제지만 아이디어만 생각해내면 정말 쉽게 접근해서 해결할 수 있는 문제가 아닌가 싶다

아직 기초를 밟고 있는 입장에서 나온 문제다보니 아무래도 단계별로 밟아가는 과정으로 낸 문제인 듯 하지만, 생각보다 간단하게 생각못하면 DFS방식으로 전부 뒤지게 코딩을 짜는 경우가 생길 수도 있지 않을까란 생각도 든다.

내용만 길지 문제 자체는 되게 간단한 문제! 😋

반응형

댓글