Java 알고리즘

[Java/알고리즘] 06 중복문자제거 정답 및 해설

엘라 ELLA 2023. 1. 14. 13:00
728x90
반응형
 

설명

소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요.

중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.

 

 

입력

첫 줄에 문자열이 입력됩니다. 문자열의 길이는 100을 넘지 않는다.

 

출력

첫 줄에 중복문자가 제거된 문자열을 출력합니다.

 

예시 입력 1 

ksekkset

 

예시 출력 1

kset

 

 


정답 및 해설

하단의 해설을 확인하세요

 

//정답 코드
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //입력값을 받기 위한 Scanner
        Scanner sc = new Scanner(System.in);
        //입력 받은 문자열
        String str = sc.next();
        //정답을 담을 answer
        String answer = "";
        
        //한글자씩 문자열에서 중복이 되는지 반복문을 통해 확인
        for (int i = 0; i<str.length(); i++){
            //중복이 되지 않았다면, i와 str.indexOf의 값이 같음을 이용
            //중복되지 않는 값만 answer에 누적
            if (i == str.indexOf(str.charAt(i))) {
                answer += str.charAt(i);
            }
        }
        System.out.println(answer);
    }
}

 

이 문제는 해설이 필요합니다. 

for문은 입력받은 단어의 길이 만큼 반복문을 실행합니다. 그러므로 i는 단어의 길이만큼 0부터 증가합니다.

반면, indexOf의 값은 배열에서 몇번째로 등장하는 값인가를 나타냅니다. 

 

예를 들어, 입력단어가 [awiqhewq]였다면, a = 0, w = 1, i = 2, q = 3, h = 4, e = 5, 이 후에 등장하는 원대래로라면 6번째 인덱스 값을 갖는 w는 앞에서 중복되었기때문에 6번째 w는 값이 w = 1, 마찬가지로 q도 앞에서 등장했으므로 7번째 q = 3 이 됩니다.

 

밑의 예제를 출력해보면 알 수 있습니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //입력값을 받기 위한 Scanner
        Scanner sc = new Scanner(System.in);
        //입력 받은 문자열
        String str = sc.next();
        //정답을 담을 answer
        String answer = "";

        //반복문으로 i와 str.indexOf의 값 비교
        for (int i = 0; i<str.length(); i++){
            System.out.println( i + " ~ " + str.indexOf(str.charAt(i)));
        }
    }
}

 

 


 

 

게시글이 도움이 되었다면

[로그인]이 필요 없는 ❤ 눌러주세요:)

반응형