코딩테스트

[구름톤 챌린지] 1주차 학습 일기 모음(2)

starcat37 2023. 8. 19. 23:22

 

 

[구름톤 챌린지] 1주차 학습 일기 모음(1)

구름톤 챌린지를 신청했다! 이번 2학기에는 코딩테스트 준비를 위해 알고리즘 문제를 꾸준히 매일 하나씩은 풀고 있는데, 구름톤 챌린지에서도 매일 한 문제씩 풀면서 여러 혜택을 받을 수 있어

starcat37.tistory.com

 

앞 포스팅에 이어서 작성한다.

 

4. 완벽한 햄버거 만들기 (08/17)

# 입력 받기
burger = []
N = int(input())
*burger, = map(int, input().split(" "))

# 맛의 정도가 가장 높은 값의 인덱스 구하기 (top)
top = burger.index(max(burger))

# 맛이 완벽할 경우의 값
result = sum(burger)

# 순회하면서 top을 기준으로 오름차순-top-내림차순인지 체크
for i in range(0, top):
    if burger[i+1] - burger[i] < 0:
        result = 0
        break
    else:
        continue

for i in range(top, N-1):
    if burger[i] - burger[i+1] < 0:
        result = 0
        break
    else:
        continue

# 결과 출력
print(result)

목요일에 드디어 조금 고민을 하는 문제를 마주할 수 있었다...! 문제는 길지만 단순히 한 마디로 정리하자면 최고값을 기준으로 최고값 이전까지는 오름차순, 최고값 이후부터는 내림차순이 되어야 한다. 풀이를 보니 다양한 풀이방법이 있던데 나는 이 모습이 산봉우리 같다고 생각했고 최고값을 기준으로 순서가 정확한지 확인했다. result는 처음에 합계를 미리 할당해놓고, 이 때 오름차순/내림차순 기준을 지키지 않은 경우 result를 0으로 할당하고 마지막에 출력해주면 된다.

 

5. 이진수 정렬 (08/18)

# 입력 받기
N, K = map(int, input().split(" "))
*nums, = map(int, input().split(" "))

# 이진수 정렬 처리
bin_nums = [str(bin(i)) for i in nums]
bin_nums.sort(reverse=True, key=lambda x: (x.count("1"), int(x[2:])))

# 출력
print(int(bin_nums[K-1], 2))

이 문제도 3번 문제처럼 key 파라미터에 lambda 식을 사용해 간단하게 풀 수 있었다. 정렬의 기준은 1) 1의 개수, 2) 실제 값이었기 때문에 각각의 기준을 하나의 튜플로 전달해주면 된다. 당일 백준에서 푼 이 문제와도 매우 흡사하다...!

 

6. 총평

첫 주라 그런가 구현이라 그런가 고생한 문제는 없었다...! 다음 주부터는 완전탐색..? 브루트포스던데 주제 특성상 난이도가 어떨지는 모르겠다🤔 그래도 이왕 시작한 거 끝까지 다 해보고 싶다! 파이팅 파이팅~~