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)));
}
}
}
게시글이 도움이 되었다면
[로그인]이 필요 없는 ❤ 눌러주세요:)
반응형
'Java 알고리즘' 카테고리의 다른 글
[Java | 알고리즘] 08. 유효한 팰린드롬 / 정답 및 해설 / replaceAll() , toUpperCase() 사용 (0) | 2023.01.18 |
---|---|
[Java/알고리즘] 07 회문 문자열 정답 및 해설 (0) | 2023.01.15 |
[Java | 알고리즘] 특정 문자 뒤집기 / lt, rt 이용해서 풀이 (1) | 2023.01.13 |
[Java|알고리즘] 단어 뒤집기 문제 및 해설 (0) | 2023.01.12 |
[Java] 3. 문장 속 단어 | 자바 알고리즘 (0) | 2023.01.03 |