Isogram
프로그램 설명
Isogram 이란 중복된 알파벳이 없는 단어를 말한다.
문자열을 입력 받아 해당 문자열이 isogram 인 경우에는 true를 출력하고, 아닌 경우에는 false를 출력한다.
quit 가 입력되면 프로그램을 종료 한다.
우선 문자열 앞 뒤의 공백을 제거하고 대소문자 구분을 하지 않기 위해 모두 소문자로 바꾼다.
이후 중복되는 문자가 있는지 체크한다.
입력 받은 단어를 java 라고 가정한다.
첫 문자인 j 와 그 다음 문자인 a를 비교한다.
그 후 j 와 v를 비교한다.
이렇게 차례대로 비교하여 j 와 맨 마지막 문자인 a 까지 비교가 끝났으면, 이후 a와 a 다음 위치에 있는 문자들을 비교하기 시작한다.
중복 검사를 진행하며 만약 중복되는 문자가 없으면 cnt 값을 1 증가시킨다.
j 와 a, 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();
}
}
실행 결과