[백준, BOJ 9229] 단어 사다리 (java)
Problem Solving/BOJ

[백준, BOJ 9229] 단어 사다리 (java)

728x90

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

 

9229번: 단어 사다리

단어 사다리란 퍼즐의 한 종류인데, 두 단어가 주어지면 한 단어에서 한 글자씩 바꿔서 다른 단어를 만드는 것이다. 이 게임은 좋은 어휘력과 맞춤법이 필요하다. 그래서 정답인지 아닌지 확인

www.acmicpc.net


문제

단어 사다리란 퍼즐의 한 종류인데, 두 단어가 주어지면 한 단어에서 한 글자씩 바꿔서 다른 단어를 만드는 것이다. 이 게임은 좋은 어휘력과 맞춤법이 필요하다. 그래서 정답인지 아닌지 확인하는 게 너무 지루하고 귀찮다.

한 쌍의 단어가 단어 사다리가 되는 조건은 다음과 같다:

  • 단어의 길이가 같고
  • 반드시 한 글자씩 바뀌어야한다.

단어 사다리가 가능한 지 판별하는 프로그램을 작성하시오.

입력

입력이 여러 번 주어지는데, #이 입력되기 전까지를 하나의 테스트케이스로 간주한다.

각 테스트케이스는 3자 이상 20자 이하의 대문자 알파벳으로 된 단어들이 순서대로 입력된다. 입력의 마지막 줄에는 #이 주어진다.

출력

단어 사다리가 가능하다면 'Correct'를, 아니면 'Incorrect'를 출력한다.

728x90

 

예제 입력 1

BARK
BARE
#
BEAK
BRAK
BRAD
BEAD
#
BEAK
BEAD
BEND
LEND
LAND
LANE
LAKE
#
MAKE
BAKE
BONK
BONE
BANE
#
#

예제 출력 1

Correct
Correct
Correct
Incorrect

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws Exception{

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		// 단어 사다리 가능 조건
		// 1. 먼저 입력 받은 단어와 다음 입력 받은 단어, 두 단어의 길이가 같아야 함
		// 2. 두 단어가 한글자만 달라야 함
		
		boolean correct = true;
		char[] c2 = br.readLine().toCharArray();
		while(true) {
			char[] c1 = c2;
			c2 = br.readLine().toCharArray(); // 다음 문자 입력
			
			if(c2[0] == '#') { // 입력 받은 단어가 '#'일때
				if(c1[0] == '#') { // '#'이 연속으로 두 번 나왔다면 반복문 탈출
					break;
				}
				else { // 하나의 단어 사다리가 끝난 경우
					if(correct) {
						sb.append("Correct\n"); // 끝난 단어 사다리의 결과 저장
					}
					else {
						sb.append("Incorrect\n");
					}
					correct = true;
					continue; // 새로운 단어 하나를 더 입력 받으러 감.
				}
			}
			if(c1[0] == '#') { // 단어 하나 더 입력 받으러 감
				continue;
			}
			
			// 이미 단어 사다리가 불가능하면 조건을 확인하지 않음
			if(correct) {
				// 조건1. 단어의 길이가 같은지 확인
				if(c1.length != c2.length) { // 같지 않다면
					correct = false;
					continue;
				}
				// 조건2. 단어가 하나만 다름
				int count = 0;
				for (int i = 0; i < c1.length; i++) {
					if(c1[i] != c2[i]) count++; // 같지 않은 단어가 나오면 카운트해줌
				}
				if(count != 1) { // 다른 단어가 딱 1개가 아니면
					correct = false;
				}
			}
		}
		
		// 답 출력
		System.out.println(sb);
	}

}
728x90