본문 바로가기
Programming/Test

[Java] 한 번만 등장한 문자 - Programmers Q120896

by 돌방로그 2023. 4. 6.

프로그래머스(Programmers)를 통해 코딩 테스트 사전 연습한 사항입니다.


요약

  • 출처: 프로그래머스(Programmers)
  • 번호: 120896

 

코드

public class Java_120896 {
    public String solution(String s) {
        List<String> strl = new ArrayList<>();
        for(int i = 0; i < s.length(); i++) {
            String check = String.valueOf(s.charAt(i));
            if(s.indexOf(check) == s.lastIndexOf(check)) {
                strl.add(check);
            }
            else {
                s = s.replace(check, "");
                i--;
            }
        }

        strl.sort(null);
        String answer = "";
        for(int i = 0; i < strl.size(); i++) {
            answer += strl.get(i);
        }

        return answer;
    }
}

 

풀이

주어진 문자열에서 딱 1번만 등장하는 문자만 추출하기 위해서는 문자열의 모든 문자를 체크해야합니다.

String 메소드 중 해당 문자열의 인덱스 위치를 반환하는 함수이지만 처음 발견된 인덱스와 마지막 발견된 인덱스를 구하는 indexOf와 lastIndexOf 함수를 이용하여 문자열에 포함된 갯수가 1개 혹은 2개 이상임을 추측할 수 있도록 로직을 구현하였습니다.

 

여기서 문자열에 문자 포함 횟수를 추측하기 위해 한 번에 indexOf 메소드가 두 번 호출되어 시간 제한에 걸릴 수 있습니다. 로직 수행 시간을 줄이기 위해 두 번 이상 호출되면 빈 값으로 변경되도록 String의 replace 메소드를 사용하여 검사 횟수를 줄이도록 하였습니다.

 

만약 해당 문제가 사전 순서로 표시되지 않아도 된다면, List<String>을 사용하지 않고 replace 결과 살아남은 String을 반환하면 됩니다.

 

출처

https://school.programmers.co.kr/learn/courses/30/lessons/120896

 

저장소

https://github.com/Ardium/TIL/blob/master/CodingTest/Java/src/programmers/level0/Java_120896.java

 

 


 

댓글