반응형
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh
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방식으로 전부 뒤지게 코딩을 짜는 경우가 생길 수도 있지 않을까란 생각도 든다.
내용만 길지 문제 자체는 되게 간단한 문제! 😋
반응형
'알고리즘 풀이 > SW Expert Academy' 카테고리의 다른 글
[SWEA 1234] 비밀번호(python) (0) | 2023.02.13 |
---|---|
[SWEA 2005] 파스칼의 삼각형(python) (0) | 2023.02.13 |
[SWEA 1954] 달팽이 문제 (0) | 2023.02.13 |
[SWEA 9386] 연속한 1의 개수(python) (0) | 2023.02.12 |
[SWEA 1966] 숫자를 정렬하자(python) (0) | 2023.02.11 |
댓글