인프런 커뮤니티 질문&답변

xogh7532님의 프로필 이미지
xogh7532

작성한 질문수

코딩테스트 실전 모의고사(with C++) : 대기업 대비

3. 영화관람[효율성: O(n) : 스택사용]

영화관람 시간초과 질문드립니다.

작성

·

130

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

자바로 작성하니까 시간초과가 나는데, 상관없는 건가요??

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] argvs) {
		Scanner sc = new Scanner(System.in);
		
		int n=sc.nextInt();
		int[] num = new int[n+1];
		
		for(int i=1; i<=n; i++) {
			num[i] = sc.nextInt();
		}
		
		Stack<Integer> st = new Stack<>();
		int[] answer = new int[n+1];
		
		for(int i=n; i>=1; i--) { //제일 뒤에서 부터 스택에 넣는다.(스택에 넣는 것은 [[인덱스 번호]]를 넣는다)
			while(!st.isEmpty() && num[i]>num[st.peek()]) { //num배열에서 인덱스 번호에 해당하는 것을 본다. 현재 배열의 값이 스택의 top부분보다 크면 pop한다. 다시말해 스택 안은 오름차순 정렬된다.
				answer[st.peek()] = i; //정답 배열에 인덱스 값 넣기, st.peek도 인덱스, i도 인덱스 번호
				st.pop();
			}
			st.push(i); //스택에 삽입
		}
		
		for(int i=1; i<=n; i++) { //답 출력
			System.out.print(answer[i]+" ");
		}
	}
}

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님의 질문과 관련된 정보가 제공된 자료에는 없어 직접적인 답변을 드리기 어렵습니다. 다만, 제공된 내용과 관련하여 몇 가지 일반적인 조언을 드릴 수 있겠습니다.

자바로 작성한 코드에서 시간 초과가 발생하는 경우, 몇 가지 가능한 원인이 있을 수 있습니다:

  1. 알고리즘의 효율성: 현재 사용하고 있는 알고리즘이 문제를 해결하기에 충분히 효율적인지 확인해 보세요. 더 효율적인 알고리즘 또는 자료구조가 있는지 검토해 볼 필요가 있습니다.
  2. 입출력 방식: 자바에서는 Scanner보다 BufferedReader와 BufferedWriter를 사용하는 것이 입출력 속도가 더 빠를 수 있습니다. 큰 데이터를 처리할 때는 이러한 방식의 변경이 시간 초과 문제를 해결하는 데 도움이 될 수 있습니다.
  3. 시간 복잡도 최적화: 반복문, 재귀 호출 등 코드의 시간 복잡도를 확인하고 개선할 수 있는 부분이 있는지 살펴보세요. 불필요한 연산을 줄이거나, 중복 계산을 피하기 위한 방법을 고려해 보세요.

이외에도 문제의 제한 사항을 다시 한 번 확인하고, 다양한 테스트 케이스를 통해 코드를 검증해 보는 것이 좋습니다. 또한, 온라인 코딩 플랫폼의 토론 탭이나 다른 사용자의 솔루션을 참고하여 비슷한 문제를 해결한 방법을 학습할 수도 있습니다.

원하는 답변을 찾지 못하셨다면, 구체적인 문제 상황과 함께 인프런 질문하기를 통해 문의해 보시는 것도 좋습니다.

학습에 도움이 되기를 바랍니다.

xogh7532님의 프로필 이미지
xogh7532

작성한 질문수

질문하기