IT/코딩테스트

[CodeUp] 3130 : 소들의 헤어스타일

_KH_ 2025. 6. 8. 17:12

[문제]


 

package day093;

public class Test01 {

	public static void main(String[] args) {

		int N = 6;
		int[] datas = {10, 3, 7, 3, 12, 2};
		int result = 0;
		// 1. 누적 값을 그대로 사용하여 마지막에 출력까지 하는 방식
		// 간편하다. 
		for(int i =0; i<N; i++) {
			int cnt = 0; 
			//2. 이처럼 내부 수행용 result를 새로 파는 방식도 있음
			// 근데 둘이 별 차이 없음.. 성능은 별 상관없으니 가독성, 디버깅 등을 장점으로 들기 
			for(int j = i+1; j<N; j++) {
				if(datas[i] <= datas[j]) {
					break;
				}

				cnt++;
			}
			result+=cnt;
		}
		System.out.println(result);
	}
}

 

[성능 개선 시]

import java.util.Stack;

public class Test02 {

	public static void main(String[] args) {

		int N = 6;
		int[] datas = {10, 3, 7, 3, 12, 2};

		int result = 0;

		Stack<int[]> stack = new Stack<int[]>();
		// 현재 소의 키, 볼 수 있는 소의 마리수

		for(int i = N-1; i>=0; i--) {
			int cnt = 0;
			// 두번째 방법

			while(!stack.isEmpty() && datas[i]> stack.peek()[0]) {
				// stack.peek()[0] == 소의 키
				cnt += stack.pop()[1];
			}

			result += cnt;
			stack.push(new int[] {datas[i], cnt+1});
		}
	}
}

'IT > 코딩테스트' 카테고리의 다른 글

[CodeUp] 3117 : 0은 빼!  (2) 2025.06.05
[프로그래머스] 수박수박수박수박수?  (0) 2025.06.03
[프로그래머스] 올바른 괄호  (2) 2025.06.02