복습
백준 1152번 단어의 개수 - split, trim 본문
정답코드
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()를 사용하여 입력된 문자값이 없을 경우를 처리하였다.
'알고리즘' 카테고리의 다른 글
knapsack(배낭) 알고리즘 - 백준 12865(DP) (0) | 2023.02.06 |
---|---|
백준 1197 최소 스패닝 트리(파이썬) - 크루스칼 알고리즘 (0) | 2022.10.13 |
정렬 알고리즘 - 선택정렬, 삽입정렬, 거품정렬 (0) | 2020.07.02 |
백준 2447번 - 재귀함수 별찍기 (0) | 2020.06.09 |
백준 10872번 문제 팩토리얼 - 자바 재귀함수 (0) | 2020.05.22 |