본문 바로가기
알고리즘/프로그래머스(JAVA)

[JAVA-120896] 한 번만 등장한 문자

by 썬키 2023. 1. 19.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

링크를 클릭하면 해당 문제로 이동합니다.

 

출처 - 프로그래머스


1. 접근하기

이 문제 역시 난이도가 0에 해당하는 문제인데 푸는데에 거의 1시간 좀 넘게 썼다.

난이도 0의 4페이지부터는 내가 풀기엔 조금은 난이도가 있는 문제 같다.

아무튼, 처음에는 ArrayList도 사용해보고 String 클래스의 replaceAll도 사용해보고 Set도 사용해봤는데

문제에서 원하는 형식으로 출력이 되지 않아서, 어쩌면 무식한(?) 방법으로 문제를 풀어보았다.

TO-DO
1) 알파벳 a부터 z를 원소로 가지고 있는 char타입의 alphabet 배열 생성 
2) 알파벳이 사용된 횟수를 카운트 할 int타입의 배열을 생성하고, 모든 원소의 값을 0으로 초기화 
3) 문제에서 단 한번만 쓰인 알파벳을 출력하라고 했으므로 원소의 값이 1인 알파벳만 출력

 

 

2. 풀이

class Solution {
    public String solution(String s) {
        char[] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
		int[] iArr = new int[26];
		String answer = "";
		
		for (int i = 0; i < iArr.length; i++) {
			iArr[i] = 0;
		}
				
		for (int i = 0; i < s.length(); i++) {
			for (int j = 0; j < alphabet.length; j++) {
				if(s.charAt(i) == alphabet[j]) {
					iArr[j]++;
				}
			}
		}
		
		for (int i = 0; i < iArr.length; i++) {
			if(iArr[i] == 1) {
				answer += alphabet[i];
			}
		}
        
        return answer;
    }
}

 

3. 결과

 

4. 리뷰

실행시간이 꽤 긴 편에 속하는 거 같다.

문제를 풀고 나서 다른 사람들의 풀이를 보니까 다들 컬렉션 프레임워크를 이용해서 풀었던데

나는 아직 컬렉션 프레임워크를 사용하는데에 익숙치가 않아서 그 사람들의 코드가 이해가 잘 안됐다.

오는 주말과 설 연휴에는 컬렉션 프레임워크에 대해서 조금 더 공부를 해보려고 한다.

그리고 나서 이 문제를 다시 풀어보자.

댓글