강의

멘토링

로드맵

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

임예성님의 프로필 이미지
임예성

작성한 질문수

4568번 문제 질문합니다!

작성

·

142

0

백준 4568번 문제 질문합니다.

https://www.acmicpc.net/problem/4568

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int size = s.nextInt(), count = 1;
        Deque<Character> deque;

        while (size > 0) {
            System.out.println("Simulation " + count);
            String[] splits = s.next().split("!");
            deque = new LinkedList<>();

            for (String check: splits) {
                for (char caching: check.toCharArray()) {
                    if(deque.contains(caching)) {
                        deque.remove(caching);
                    } else if(deque.size() == size) {
                        deque.pollFirst();
                    }
                    deque.offerLast(caching);
                }
                for(char print: deque) {
                    System.out.print(print);
                }
                System.out.println();
            }
            count++;
            size = s.nextInt();
        }
    }
}

자바로 위와 같이 작성했습니다.

채점 결과가 시간 초과, 메모리 초과나 런타임 에러같으면 차라리 고민을 해보겠는데, 틀렸습니다로 나옵니다.

엄청 오래 생각해보지는 않았지만 반례도 생각이 안나서 질문 올려봐요.

어디가 잘못됐을까요?

답변 1

0

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

임예성님의 백준 4568번 문제 관련 자바 코드 질문에 대해 답변드릴게요.

우선 문제의 요구 사항에 맞추어 코드를 작성하셨는데 결과가 ‘틀렸습니다’로 나왔을 경우, 이는 주어진 입력에 대해 올바른 출력을 하지 않았다는 것을 의미합니다. 일반적으로 문제 해결 과정에서 ‘틀렸습니다’가 발생할 경우 다음과 같은 접근 방법을 추천드립니다:

  1. 문제 조건 재확인: 문제의 조건을 정확히 이해하고 있는지 다시 한번 체크해 보세요. 특히 입력, 출력 조건에 주의해서 보셔야 합니다.

  2. 예외 케이스 검토: 예외가 될 수 있는 케이스들을 생각해보고 해당 케이스들을 손수 입력해본 뒤, 그에 대한 출력을 확인해 보세요.

  3. 질문자의 코드 검토: 제시해주신 코드에서 오류가 발생할 만한 부분을 눈여겨 보셔야 합니다. 코드에서 제거 과정(deque.remove(caching);)에서의 시간 복잡도가 O(N)임을 고려하셔야 합니다. 만약 캐시 크기(size)가 매우 클 경우, 이 중첩 루프는 시간 초과를 유발할 수 있습니다. 또한, 해당 조건문 안에서 캐싱 로직이 올바르게 구현되었는지 확인하셔야 합니다.

  4. 디버깅: 시뮬레이션을 따라하면서 변수의 변화를 실시간으로 체크하고, 예상했던 로직대로 코드가 실행되고 있는지 검사해보세요.

  5. 동료와 토론: 가능하다면 다른 사람과 코드를 공유하고 토론해보세요. 때로는 다른 시각에서 문제를 바라보는 것만으로도 숨어있던 오류를 발견할 수 있습니다.

현재 제시하신 정보를 바탕으로 코드의 특정 부분에 문제가 있다고 직접적으로 지적하기는 어렵지만, 위의 접근 방법대로 문제를 해결하시면 반례를 찾아내실 수 있을 거라고 생각합니다.

참고로, 인프런은 프로그래밍 학습과 관련 있는 질문 사항에 대해 답변을 도와드리는 플랫폼입니다. 인프런의 강의별 수강 기한은 강의 페이지 우측 배너에서 확인하실 수 있고, 동시 접속 또는 계정 공유를 제한하고 있습니다. 강의 관련 문의가 있으시면, 해당 강의의 커뮤니티 질문&답변 게시판에 질문해주시면 강사님께서 직접 답변해주십니다.

문제 해결에 조금이나마 도움이 되었기를 바랍니다. 화이팅입니다!

임예성님의 프로필 이미지
임예성

작성한 질문수

질문하기