인프런의 "자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비" 강좌를 수강했습니다.
Q1-06. 중복문자제거
소문자로 이루어진 문자열 하나를 입력받고, 그 중 중복된 알파벳을 제거한 문자열을 출력하라.
문자의 순서는 원래 문자열의 순서를 따른다.
✏️ 내가 쓴 답
문자열 str가 알파벳 x 를 포함하고 있지 않으면! answer 문자열에 알파벳 하나씩 저장해준다.
문자열 중에 특정 문자열이 포함되어있는지 확인하는 String 클래스의 contains() 메소드를 사용했다.
boolean contains(CharSequence s)
contains에 들어갈 파라미터는 문자열이 들어갈 수 있으므로, char 문자인 x를 String.valueOf() 로 문자열 변경해주었다.
...
public String solution(String str) {
String answer = "";
char[] cArr = str.toCharArray();
for(char x : cArr) {
if(!answer.contains(String.valueOf(x))) answer+= x;
}
return answer;
}
...
* if 문 안에서 answer를 기준으로 contains 검증 해야하는데, str 로 적어놓았어서 수정...^^
댓글 감사합니당 :)
👨🏻🏫 풀이코드
강의를 통해 선생님의 소스코드도 확인해보자.
...
public 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;
}
...
6번째줄
이 문장을 실행시키면 아래 이미지 중 드래그 된 내용이 출력된다.
str.charAt(i)
: 문자열 중 i 번째에 해당하는 문자 i
: i번 째 반복문, 즉 i 번째 자리str.indexOf(str.charAt(i))
: i번째 해당하는 문자 하나가, 전체 문자열 중에 몇번째 인덱스에 있는지? 가장 처음 만나는 문자의 인덱스값을 알려준다.
그러면 i번째 자리에 위치한 문자(charAt(i))
가 i번째 자리 이전
까지 존재하면 안된다!
그러면, i 번째 자리에 처음 그 문자가 나와야 하는것!! 그 문장이 7번째 줄이다.
🤔 더 알아볼 점
String contains(CharSequence c) 여기서 String 클래스와 그 하위 메소드들을 확인할 수 있다.
contains(CharSequence c) 메소드를 사용하면서 String 과 CharSequence와 차이점이 궁금했다.
이 내용은 이 블로그에 잘 정리 되어있다.
🤓 정리
- indexOf()와 charAt() 를 잘 활용해보자. 좀 더 효율적인 코드를 만들 수 있다.
- str.charAt(i) : i 번째 문자 출력
- str.indexOf('A') : 문자 A가 위치하는 곳의 인덱스 i 찾기
'Study > 알고리즘' 카테고리의 다른 글
[알고리즘/인프런] String(문자열) #1-08. 유효한 팰린드롬 (0) | 2022.04.17 |
---|---|
[알고리즘/인프런] String(문자열) #1-07. 회문 문자열 (0) | 2022.04.17 |
[알고리즘/인프런] String(문자열) #1-05. 특정문자 뒤집기 (0) | 2022.04.13 |
[알고리즘/인프런] String(문자열) #1-04. 단어 뒤집기(StringBuilder) (0) | 2022.04.12 |
[알고리즘/인프런] String(문자열) #1-03. 문장 속 단어 (0) | 2022.04.07 |