[Algorithm] 탑
문제설명
-
수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다.
-
예를 들어 높이가 6, 9, 5, 7, 4인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 그러면, 탑은 다음과 같이 신호를 주고받습니다. 높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑이 수신하고, 높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 어떤 탑에서도 수신할 수 없습니다.
문제: https://programmers.co.kr/learn/courses/30/lessons/42588
제한사항
- heights는 길이 2 이상 100 이하인 정수 배열입니다.
- 모든 탑의 높이는 1 이상 100 이하입니다.
- 신호를 수신하는 탑이 없으면 0으로 표시합니다.
풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function solution(heights: number[]): number[] {
const answer: number[] = Array(heights.length).fill(0); // heights의 길이만큼 0으로 채운 array 생성
for (let i: number = 1; i < heights.length; i++) {
// heights의 모든 요소를 반복
for (let j: number = i - 1; j >= 0; j--) {
// 뒤에 있는 탑의 길이보다 높은 탑에 레이저가 닿으므로 i번째 앞에서부터(i-1) 0번째까지 더 높은 탑이 있는지 체크
if (heights[i] < heights[j]) {
// 현재 탑보다 높은 탑이 있으면
answer[i] = j + 1; // j+1 할당.
break;
}
if (j === 0) {
// 0번째는 앞에 다른 탑이 없으므로 무조건 0.
break;
}
}
}
return answer;
}