본문 바로가기

Coding Test/Problem Number

[Java] 단어순서 뒤집기 [12605번]

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

  • 예제 입력1
3
this is a test
foobar
all your base
  • 예제 출력1
Case #1: test a is this
Case #2: foobar
Case #3: base your all

  • 문제 접근
    • 문자열을 입력 받아 공백 단위로 나눈 뒤 거꾸로 출력하는 문제
  • 문제 해결
    • split으로 나눈 뒤 for문을 이용하여 마지막 인덱스부터 출력하는 방법1
    • split으로 나눈 뒤 stack을 이용하여 마지막 알파벳부터 출력하는 방법2
    • 위 두 가지 방법으로 풀어보고 메모리, 시간, 구현 시 필요한 라인 수 비교
  • 기존 풀이 [메모리 : 13984 KB / 시간 : 116ms]
public static void main(String[] args) throws Exception{
    StringBuilder sb = new StringBuilder();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int N = Integer.parseInt(br.readLine());
    for(int i = 0; i < N; i++){
        String[] input = br.readLine().split(" ");
        sb.append("Case #").append(i+1).append(":").append(" ");
        for(int j = input.length - 1; j >= 0; j--){
            sb.append(input[j]).append(" ");
        }
        sb.deleteCharAt(sb.length() - 1).append("\n");
    }
    System.out.println(sb);
}
  • Stream 풀이 [메모리 : 13988KB / 시간 : 120ms]
public static void main(String[] args) throws Exception{
    StringBuilder sb = new StringBuilder();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    Stack<String> reverseSequence = new Stack<>();
    int N = Integer.parseInt(br.readLine());
    for(int i = 0; i < N; i++){
        String[] input = br.readLine().split(" ");
        sb.append("Case #").append(i+1).append(":").append(" ");
        for (String string : input)
            reverseSequence.push(string);
        while(!reverseSequence.isEmpty())
            sb.append(reverseSequence.pop()).append(" ");
        sb.deleteCharAt(sb.length() - 1).append("\n");
    }

    System.out.println(sb);
}

성능의 차이는 딱히 없지만, 테스트 케이스가 10000개, 100000개 엄청나게 늘어나게 된다면??

자료구조를 사용하는 것은 추가적인 메모리 소모가 발생하지 않을까 싶기는 하고 구현 자체는 for문이 더 쉬웠으나,

배열의 인덱스를 사용할 때 자주 발생하는 IndexoutOfBoundsException이 발생하지 않도록 주의

 

Stack 자료구조를 잘 모른다면 Stack의 완전 기초가 되는 문제여서 명령어 사용하는 기초 예제정도로 좋다고 생각 됨

'Coding Test > Problem Number' 카테고리의 다른 글

[Java] 큐 [10845번]  (0) 2024.07.24
[Java] 3의 배수 [1769번]  (0) 2024.07.24
[Java] 막대기 [17608번]  (0) 2024.07.24
[Java] N과 M 12 [15666번]  (0) 2024.07.22
[Java] N과 M 11 [15665번]  (0) 2024.07.22