띠오니 개발자 성장일지
article thumbnail
반응형

인프런의 "자바(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 찾기 

 

 


반응형
profile

띠오니 개발자 성장일지

@띠오니

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!