728x90
문제는 틈틈히 푸는데 TIL를 쓰기엔 정성이 부족해서 잘안하게 되네요.. ㅎㅎ
오늘은 백준 문제 12605번 : 단어순서 뒤집기 에 대해서 이야기 해볼까 합니다.
문제
스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만 이루어져 있다. 단어 사이에는 하나의 스페이스만 들어간다.
입력
첫 행은 N이며, 전체 케이스의 개수이다.
N개의 케이스들이 이어지는데, 각 케이스는 스페이스로 띄어진 단어들이다. 스페이스는 라인의 처음과 끝에는 나타나지 않는다. N과 L은 다음 범위를 가진다.
N = 51 ≤ L ≤ 25
앞서 그냥 받은 문자열을 뒤집는것이 아닌 항해99에서 내준 문제는 스택/큐 를 사용해서 문제를 풀라고 하여서 Stack을 사용했습니다.
public class backjoon12605 {
public static void main(String[] args) throws IOException {
//BufferedReader로 입력받기
//BufferedReader를 사용해 입력을 받아 n에 저장합니다. n은 테스트 케이스의 수입니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
//for문이 각 테스트 케이스마다 실행됩니다.
//Stack<String> q = new Stack<>();가 for문 안에 있어, 각 테스트 케이스마다 새로운 Stack이 생성됩니다.
for(int i =1; i<=n; i++){
Stack<String> q = new Stack<>();
//입력된 문장을 split(" ")으로 단어별로 나누어 String 배열 que에 저장합니다.
String[] que = br.readLine().split(" ");
//for-each 루프를 사용해 각 단어를 Stack에 push()로 추가합니다.
for(String a : que){
q.push(a);
}
//System.out.print("Case #" + i + ":");를 출력해 현재 테스트 케이스 번호를 출력합니다.
//while (!q.isEmpty()) 루프에서 Stack이 비어있지 않을 때까지 pop()을 사용해 단어를 출력합니다. Stack은 LIFO(Last In, First Out) 구조이므로 마지막에 push()된 단어부터 출력되어 단어 순서가 역순이 됩니다.
//System.out.println();로 각 테스트 케이스 출력을 마치고 줄바꿈을 합니다.
System.out.print("Case #"+i+": ");
while(!q.isEmpty()){
System.out.print(" "+ q.pop());
}
System.out.println();
}
}
}
TIP :
각 테스트 케이스마다 Stack을 새로 생성하므로, 이전 테스트 케이스의 데이터가 현재 테스트 케이스에 영향을 주지 않습니다.
Stack의 내용을 pop()하면서 단어를 출력할 때, 단어가 역순으로 출력됩니다.
stack이 for문 밖에 선언이 되어있어도 잘 작동되고 답변 똑같이 나옵니다. 그러나 그럴 경우,
모든 테스트 케이스가 동일한 Stack 인스턴스를 공유하기 때문에 예상치 못한 결과를 초래할 수 있습니다.
다만, 현재 코드 구조에서는 매 반복문 안에서 Stack 이 비워질 때까지 pop() 을 호출하므로 동작할 수 있습니다.
728x90
'잡담' 카테고리의 다른 글
안녕하세요, 개발자 던킨입니다. (3) | 2024.09.20 |
---|---|
아파치 스톰 과 아파치 카프카 (0) | 2024.07.16 |
JDBC -1 (0) | 2022.01.13 |
API-IO (입출력 성능향상 보조 스트림) (0) | 2021.12.20 |
Input, Output (0) | 2021.12.20 |