반응형
문제
소문자로 된 한 개의 문자열이 입력된다. 그러면 중복된 문자는 제거하고 출력하는 프로그램을 작성하세요.
(중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지한다.)
입력
- 첫 줄에는 문자열이 입력된다. 문자열의 길이는 100을 넘지 않는다.
출력
- 첫 줄에 중복 문자가 제거된 문자열을 출력
더보기
예시 입력 - ksekkset / 예시 출력 - kset
Solution
✨ 먼저 간단한 코드를 사용하여 이해해 보자.
아래 주석처리 되어있는 코드를 통해 알아보려고 한다.
- 먼저 str.charAt()으로 i 번째에 해당하는 문자를 출력한다.
- i를 출력한다.
- str.indexOf()로 첫번째 문자열 앞에서부터 처음 발견되는 인덱스를 반환한다.
🎈 아래 사진처럼 결과를 보면 i와 indexOf(i)의 결과가 같은 문자만 담아서 출력하면 된다는 결론에 도달할 수 있다.
참고
🌈 charAt()
- String으로 받은 문자열을 char 타입으로 한 글자만 받는 함수이다.
- 문자열은 char 타입으로 반환한다.
- 숫자로 반환 받고싶으면 아스키 코드 값으로 바꿔 줘야 한다.
🌈 indexOf()
- 특정 문자나 문자열이 앞에서부터 처음 발견되는 index를 반환한다.
- 찾지 못했을 경우 -1을 반환한다.
🌈 contains()
- boolean contains(CharSequence s)
- contains() 함수는 대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수이다.
- 대/소문자를 구분한다.
Code
1. charAt() , indexOf() 이용
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Main m = new Main();
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
System.out.println(m.solution(str));
}
private String solution(String str) {
String answer = "";
for(int i=0; i<str.length(); i++){
//System.out.println(str.charAt(i) + " " + i + " " + str.indexOf(str.charAt(i)));
if(str.indexOf(str.charAt(i)) == i) answer += str.charAt(i);
}
return answer;
}
}
2. contains() 이용
import java.util.Scanner;
public class Main {
private static String solution(String str) {
String answer = "";
char[] c = str.toCharArray();
for (char x : c) {
if (!answer.contains(String.valueOf(x))) answer += x;
}
return answer;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(solution(str));
}
}
정리
- indexOf()와 charAt() 를 잘 활용해보자. 더 효율적인 코드를 사용 하게 될 것이다.
- str.charAt(i) : i 번째 문자를 출력한다.
- str.indexOf('A') : 문자 A의 위치 인덱스 i를 찾아준다.
반응형
'Java' 카테고리의 다른 글
[JPA] 프로젝션과 결과 반환 - 기본 (0) | 2023.01.13 |
---|---|
[React] 비밀번호 암호화 하기 (crypto, sha256) (0) | 2022.11.30 |
[알고리즘/JAVA] String(문자열) - 회문 문자열 (2) | 2022.11.29 |
[NextJS/Ts] 카카오 지도 띄우기 (0) | 2022.11.16 |
[React] .env 환경 구분 (prod / dev / local) (0) | 2022.10.21 |