해당 문제는 트로피가 에제 입력 1처럼 1자로 쭉 나열되어 있을 때, 각각의 값들이 트로피의 높이라고 할 수 있다.
트로피의 높이를 왼쪽에서 보았을 때, 오른쪽에서 보았을 때 높이가 다르기 때문에 높이가 작은 트로피 큰 트로피에 가려져서 안보인다고 한다. 그래서, 왼쪽에서 보았을 때와 오른쪽에서 보았을 때 각각 보이는 개수를 출력하는 문제이다.
이 문제는 트로피의 개수 N이 최대 50이라고 했으므로, 요구하는 대로 문제를 풀어보면 된다.
우선 3 , 4, 6, 4, 3, 7, 2 트로피가 있다고 가정 해보면 왼족에서 보았을 때, 6뒤에 4 3이 가려져서 안보이고 7뒤에 2가 가려져서 안보이기에 왼쪽에는 4,3,2를 제외한 총 4개가 보이는 것이다.
오른쪽에서 보았을 때는 7이 너무 커서 뒤에 있는 3, 4, 6, 4, 3은 전부 안보이기에 총 2개가 보이는 것이다.
def ascending(array):
now = array[0]
result = 1
for i in range(1, len(array)):
if now < array[i]:
result += 1
now = array[i]
return result
n = int(input())
array = []
for _ in range(n):
array.append(int(input()))
print(ascending(array))
array.reverse()
print(ascending(array))
ascending()이란 하나의 함수를 만들었는데, 왼쪽에서 보았 을 때 트로피 갯수를 세는 함수라고 볼 수 있다.
오름차순으로 원소들만 센다.
예를 들어, 3,5,7,2,9 라는 숫자가 있으면 3,5,7 센 다음 2는 오름차순이 아니기에 건너뛰고 9를 센다.
now가 현재 보고 있는 트로피의 높이라고 할 수 있고,
결과적으로 result를 현재 보고 있는 트로피가 더 높은 트로피라면 +=1을 하는 방식으로 구현 한다.
이 함수를 이용해서
print(ascending(array))를 통해, 왼쪽에서 보고 있는 걸 출력해두고,
array.reverse()를 통해 반대로 뒤집어서 오른쪽에서 보고 있는걸 출력 할 수 있다.
'코딩테스트' 카테고리의 다른 글
BACKJOON 1236번 (성 지키기) (0) | 2023.06.05 |
---|---|
BACKJOON 1302번 (베스트셀러) (0) | 2023.06.05 |
BACKJOON 1568번 ( 새 ) (0) | 2023.06.05 |
BACKJOON 1543번 (문서 검색) (0) | 2023.06.05 |
BACKJOON 2751번 (수 정렬하기 2) (0) | 2023.06.05 |