문제 개요
숫자로 이루어진 리스트 nums가 주어졌다고 가정해 보겠습니다. 이때 이 리스트가 엄격히 증가 → 엄격히 감소 → 엄격히 증가하는 식으로 증가와 감소를 번갈아 가며 변화하는지 확인해야 합니다. 단, 리스트 전체가 엄격히 증가만 하는 경우에도 유효한 것으로 간주합니다.
예시
입력이 nums = [2, 4, 8, 7, 5, 1, 5, 7, 2, 1]이라면 결과는 True입니다. 그 이유는 다음과 같습니다.
- [2, 4, 8] → 증가
- [7, 5, 1] → 감소
- [5, 7] → 증가
- [2, 1] → 감소
증가 구간과 감소 구간이 교대로 나타나므로 조건을 만족합니다.
해결 접근 방법
이 문제는 다음 단계를 따라 해결할 수 있습니다.
- 리스트는 반드시 증가로 시작해야 하므로,
nums[1] <= nums[0]이면False를 반환합니다. - 리스트의 처음부터 끝까지 순회하면서, 인접한 두 요소
nums[i]와nums[i-1]의 값이 서로 같으면False를 반환합니다. - 위 검사를 모두 통과하면
True를 반환합니다.
즉, 이 코드는 리스트가 증가로 시작하는지와 인접한 요소 사이에 값이 같은 경우(엄격한 증가 또는 감소가 아닌 평평한 구간)가 존재하는지를 검사하여 유효성을 판단합니다.
구현 예제
다음 구현을 통해 더 자세히 이해할 수 있습니다.
def solve(nums):
if nums[1] <= nums[0]:
return False
for i in range(len(nums)):
if i - 1 >= 0:
if nums[i] == nums[i - 1]:
return False
return True
nums = [2, 4, 8, 7, 5, 1, 5, 7, 2, 1]
print(solve(nums))입력
[2, 4, 8, 7, 5, 1, 5, 7, 2, 1]
출력
True