Old/Algorithms

[JAVA] 프로그래머스: 탑 (코딩테스트 고득점 kit > 스택/큐)

유뱅유뱅뱅 2020. 7. 11. 21:11

 

https://programmers.co.kr/learn/courses/30/lessons/42588

 

코딩테스트 연습 - 탑

수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다

programmers.co.kr

문제를 읽어보고 스택 문제라는 감이 왔음
하지만 스택을 써서 비교할때 매 탑마다 pop을 해서 높이 비교를 하고 다음 탑에 넘어갈 때 push를 다시 해줘야 한다고 생각하여 반복문을 이용하여 구현함

// 탑
// 수평 직선에 탑 N대 
// 모든 탑 꼭대기에 신호 송/수신 장치
// 송신 신호는 보낸 탑보다 더 높은 탑에서만 수신
// 한번 수신된 신호는 다른 탑으로 송신 안됨
// 신호 수신한 탑 기록 배열
class Solution {
    public int[] solution(int[] heights) {
        int[] answer = new int[heights.length];
	        // 수신한 탑 있는지 확인용도
	        boolean flag = false;
	        
	        // 제일 오른쪽부터 왼쪽으로 신호 송신
            // 첫 번재 탑은 무조건 0으로 기록
	        answer[0] = 0;
	        for(int i=heights.length-1; i>=1; i--){
	            flag = false;
	            // 송신 탑 높이보다 수신 탑 높이가 높으면 수신한 탑 위치 기록 아니면 다음으로 넘어감
	            for(int j=i-1; j>=0; j--){
	                if(heights[j] > heights[i]){
	                    answer[i] = j+1;
	                    flag = true;
	                    break;
	                }
	            }
	        
	            // 첫 번째 탑까지 수신한 탑이 없으면 0으로 기록
	            if(!flag)
	                answer[i] = 0;
	        }
	        
	        
	        return answer;
    }
}