-
[KOITP] 탑자료구조 및 알고리즘/문제풀이 2017. 1. 12. 08:00
출 처 : http://koitp.org/problem/SDS_PRO_3_4/read/
시간 제한 메모리 제한 제출 횟수 정답 횟수 (비율) 정답자 수 2.0 초 512 MB 2317 549 (24%) 432 < Comment >
원래는 Stack 구조를 사용하는 것 같기는 한데, 배열을 이용하여 풀었습니다. 사실 이것도 스택이라고 보면 못볼것도 아니기는 하지만, Stack을 어떻게 응용할지 딱히 떠오르는 바가 없어서 그냥 Stack 일부 개념만 차용하여 뒤에서부터 처음으로 만나는 자신보다 크거나 같은 타워의 값을 저장하는 방식으로 진행했습니다.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class Tower { public static int N = 0; public static int tower[] = null; public static int answer[] = null; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); N = Integer.parseInt(br.readLine()); tower = new int[N+1]; answer = new int[N+1]; StringTokenizer st = new StringTokenizer(br.readLine()); for (int i = 1 ; i <= N ; i++) { tower[i] = Integer.parseInt(st.nextToken()); } int currHeight = 0; for (int i = N ; i > 1 ; i--) { currHeight = tower[i]; for (int j = i - 1 ; j > 0 ; j--) { if (currHeight <= tower[j]) { answer[i] = j; break; } } } for (int i = 1 ; i < N ; i++) { bw.write(answer[i] + " "); } bw.write("" + answer[N]); bw.flush(); bw.close(); } }