[Java] Isogram

Minji Kim·2021년 7월 26일
0

Java

목록 보기
2/9
post-thumbnail

Isogram

프로그램 설명

isogram 이란 중복된 알파벳이 없는 단어를 말한다.

문자열을 입력 받아, 해당 문자열이 isogram 인 경우에는 true를 출력하고,
isogram 이 아닌 경우에는 false를 출력한다.
quit 가 입력되면 프로그램을 종료한다.


우선 문자열 앞 뒤의 공백을 제거하고, 대소문자 구분을 하지 않기 위해 모두 소문자로 바꾼다.
이후 중복되는 문자가 있는지 체크한다.

입력 받은 단어를 java 이라 가정한다.
첫 문자인 j와 그 다음 문자인 a를 비교한다. 그 후 jv를 비교한다.
이렇게 차례대로 비교하여 j와 맨 마지막 문자인 a까지 비교가 끝났으면, 이후 aa 다음 위치에 있는 문자들을 비교하기 시작한다.

중복 검사를 진행하며 만약 중복되는 문자가 없으면 cnt 값을 1 증가시킨다.
ja, v, a 문자를 비교하였는데 중복된 게 없으니 cnt 는 3일 것이다.
즉, i 번째 문자와 마지막 문자까지 비교가 끝나고, 중복되는 문자가 없는 경우 cnt 값은 (문자열 길이 + 1 + i) 이다.
cnt + 1 + i == str.length() 조건을 만족한다면 temp 문자열에 중복되지 않는 것을 확인한 문자열을 저장한다.

마지막까지 비교를 끝낸 뒤 str 문자열의 길이와 temp 문자열의 길이가 같다면 isogram 이고, 다르다면 isogram이 아니다.
str 문자열에 입력 받은 문자가 1개라면 isogram 이지만 for 문을 통해 비교를 하지 않으므로 따로 조건에 추가하여 true를 출력하게 하였다.

❗ String[] 을 사용하면 더 쉽게 코드를 짤 수 있다.

소스 코드

import java.util.Scanner;

public class Isogram {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str, temp = "";
		int cnt = 0;

		while (true) {
			str = sc.nextLine().trim();
			if (str.equalsIgnoreCase("quit"))
				break;
			str = str.toLowerCase();

			for (int i = 0; i < str.length(); i++) {
				for (int j = i + 1; j < str.length(); j++)
					if (str.charAt(i) != str.charAt(j)) // 중복되는 문자가 없는 경우 cnt 1 증가
						cnt++;
				
				if (cnt + 1 + i == str.length()) // 중복된 문자가 없는 경우, temp 문자열에 str[i] 문자 저장
					temp += str.charAt(i);
				cnt = 0;
			}
			
			if (str.length() == temp.length() || str.length() == 1)
				System.out.println("true");
			else
				System.out.println("false");
			temp = "";	// 다음 문자열 비교를 위해 temp 문자열 초기화

		}
		sc.close();
	}

}

실행 결과

profile
블로그 이전 mimah.tistory.com

0개의 댓글