본문 바로가기

코딩테스트/자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

섹션 1. 문자열 - 6. 중복 문자 제거

📌 문제 설명

소문자로 된 한 개의 문자열이 입력되면 중복된 문자를 제거하고, 중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지하는 프로그램을 작성하세요.

  • 문자열의 길이는 최대 100입니다.

📝 입력 & 출력

🔹 입력

  • 첫 번째 줄: 소문자로 된 문자열 (최대 길이 100)

🔹 출력

  • 중복 문자가 제거된 문자열 출력

🔸 예제 입력 1

ksekkset

🔸 예제 출력 1

kset

💡 해결 방법

  1. 문자열을 순회하며 중복된 문자가 처음 등장한 위치인지 확인
    • indexOf(x) == i를 활용하여 해당 문자가 처음 등장한 위치인지 검사
  2. 첫 등장하는 문자만 최종 문자열에 추가
  3. 문자열의 순서를 유지해야 하므로 Set 자료구조 대신 문자열을 직접 순회하는 방식 사용

💻 코드 구현 (Java)

package partString;

import java.util.*;

// 중복 문자 제거
public class Problem6 {

    public String solution(String str) {
        String answer = "";
        
        for (int i = 0; i < str.length(); i++) {
            char x = str.charAt(i);
            if (str.indexOf(x) == i) { // 해당 문자가 처음 등장한 위치인지 확인
                answer += x;
            }
        }
        
        return answer;
    }

    public static void main(String[] args) {
        Problem6 T = new Problem6();
        Scanner kb = new Scanner(System.in);
        String s = kb.next();
        System.out.print(T.solution(s));
        kb.close();
    }
}

📖 코드 설명

1️⃣ indexOf()를 활용한 중복 검사

if (str.indexOf(x) == i)
  • str.indexOf(x) → 해당 문자가 처음 등장하는 위치 반환
  • i → 현재 검사 중인 문자 위치
  • 현재 위치(i)와 indexOf(x)가 같다면 처음 등장한 문자이므로 추가

2️⃣ 결과 문자열에 추가

answer += x;
  • 처음 등장한 문자만 결과 문자열에 추가
  • 기존 문자열의 순서를 유지하면서 중복 제거 가능

3️⃣ contains()를 활용한 방법

for (char x : str.toCharArray()) {
    if (!answer.contains(String.valueOf(x))) {
        answer += x;
    }
}
  • ✅ contains()를 사용하여 answer에 해당 문자가 이미 있는지 확인

⏳ 시간 복잡도 분석

  • O(n²) (n: 문자열 길이)
  • indexOf(x)는 최악의 경우 O(n)이므로, 전체 루프와 함께 O(n²) 발생 가능
  • 입력 크기가 작기 때문에 현실적으로는 큰 문제 없음

출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

 

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런

김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급

www.inflearn.com