복습

백준 1152번 단어의 개수 - split, trim 본문

알고리즘

백준 1152번 단어의 개수 - split, trim

ykm1256 2020. 5. 12. 17:16

정답코드

import java.io.IOException;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws IOException {
		int cnt = 0;
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i) == ' ') {
				if (i != s.length() - 1 && i != 0) {
					cnt++;
				}
			}
		}
		if(s.length()==1 && s.charAt(0)== ' ') cnt = -1; 
		System.out.print(cnt + 1);
	}
}

문제에 공백은 연속으로 나올 수 없다는 조건이 있다. 그래서 공백의 갯수만 세면 되는 문제라고 생각하여 답을 제출했지만, 90%에서 틀렸다는 문구가 나왔다. 계속해서 고민해본 결과 문자없이 공백하나만 들어가있는 문자열의 경우 cnt값이 0이지만, 출력값은 1이 나오게 되어 틀린 것이었다. 그래서 그 경우만 생각하여 조건을 하나 추가한 후 마무리하였다.

 

 

 

이 문제풀이에 유용한 자바 문법

Split 함수

 : 특정 문자를 기준으로 문자열을 나누어 배열에 저장한다.

String s = "123-456-789";
String[] Num = s.split("-");

위와 같이 작성하면 Num배열에는 인덱스 0번부터 2번까지 123, 456, 789 값이 차례대로 저장된다.

String s = "123-456-789";
String[] Num = s.split("-",2);

또, 배열의 크기를 지정할 수 있는데 위의 코드 처럼 2로 지정하게 되면 Num[0]=123, Num[1]=456-789가 된다.

 

Trim 함수

 : 문자열에 쓸데없는 공백이 있을 경우 공백을 제거해주는 함수.

String s = " 공백이 있습니다. "
System.out.println(s);

s = s.trim();
System.out.println(s);

위와 같은 결과가 나오며 시작과 끝의 공백을 제거해준다. 하지만 문자열 중간에 있는 공백은 제거되지 않는다.

 

trim과 split을 사용한 코드

 

import java.io.IOException;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws IOException {
		int cnt = 0;
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();		
		s = s.trim();
		if(s.isEmpty()==false) {
		String[] Num = s.split(" ");
		System.out.println(Num.length);
		}
		else System.out.println(0);
	}
}

trim으로 먼저 양 끝의 공백을 제거하고, isEmpty()를 사용하여 입력된 문자값이 없을 경우를 처리하였다.