본문 바로가기
Memo/코테

[백준] 1152번: 단어의 개수

by 연로그 2021. 10. 6.
반응형

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

 


처음 풀이 (결과: 실패)

public class Main {
    public static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    public static void main(String[] args) throws IOException {
        bw.write(bf.readLine().trim().split(" ").length+"\n");
        
        bf.close();
        bw.close();
    }
}

굉장히 쉬운 문제라고 생각했고 테스트케이스를 모두 통과하는데 왜 실패라고 뜨는지 알 수 없었다.

검색하던 결과 .split()의 문제점을 발견했다.

 

trim()을 이용함으로서 문장의 맨 앞이나 맨 뒤의 공백을 제거했으니까 문제가 없을거라고 생각했다.

 

하지만 아래 코드를 실행해보면 생각이 달라진다...

String s = bf.readLine().trim();

bw.write("!"+s+"!\n");
bw.write(s.split(" ").length+"\n");
bw.write("".split(" ").length+"\n");

실행 결과

trim()을 통해 공백이 없어진 것을 확인할 수 있지만, ""를 split했더니 크기가 1인 것이 확인된다.

 

String s = bf.readLine().trim();

for(String str: s.split(" ")) {
	bw.write("!"+str+"!\n");
}

실행 결과

 

이전에도 비슷한 내용을 포스팅을 했었는지 찾아보기만 한건지...

어렴풋하게 똑같은 일을 겪은 기억은 있는데 오랜만에 사용하게 되면 자꾸 깜빡하게 되는 것 같다😅

 

수정한 풀이 (결과: 성공)

public class Main {
    public static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    public static void main(String[] args) throws IOException {
        StringTokenizer st = new StringTokenizer(bf.readLine()," ");
        bw.write(st.countTokens()+"\n");
        
        bf.close();
        bw.close();
    }
}

StringTokenizer를 이용했더니 바로 해결되었다 ㅜ.ㅜ

trim() 결과가 ""인 경우에 if를 통해 따로 처리해도 되지만..

너무 번거롭기도 하고 StringTokenizer에서 countTokens라는 메소드를 지원한다고 해서 이 방법으로 사용했다.

반응형

'Memo > 코테' 카테고리의 다른 글

[프로그래머스] 10주차 위클리  (0) 2021.10.13
[프로그래머스] 2개 이하로 다른 비트  (2) 2021.10.07
백준 - 빗물 (JAVA)  (0) 2021.10.01
없는 숫자 더하기  (0) 2021.09.16
부족한 금액 계산하기  (0) 2021.09.16