성장일기

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한

www.acmicpc.net

문제


알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

 

 

입력


첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

 

 

출력


각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

 

예제 입출력


예제 입력 예제 출력
The Curious Case Of Benjamin Button 6
 Mazatneunde Wae Teullyeoyo 3
Teullinika Teullyeotzi  2

 

풀이


 이 문제는 단순히 공백의 개수를 고려하면 단어의 개수를 구할 수 있을 것 처럼 보이지만 함정이 숨어있었다. 문자열의 앞과 뒤에 공백이 들어갈 수가 있다는 것이다. 따라서 split()이나 charAt()을 사용할 경우 공백만 입력했을 경우 0으로 출력이 되어야 정답이지만, 1이 나와서 오답판정을 받게 될 것이다. 따라서 split()이나 charAt()을 사용하려면 양끝 공백에 대해 예외처리를 해야한다.

 

 

코드


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

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

공유하기

facebook twitter kakaoTalk kakaostory naver band