Space
article thumbnail
반응형
반응형

[프로그래머스] 한 번만 등장한 문자


function solution(s) {
    return [...s].filter(el => 
        [...s].filter(el2 => el === el2).length === 1
    ).sort().join('');
}

동작 방식

1. 문자열을 배열로 변환

[...s] // 예를 들어, s가 "aabbcd"라면 ['a', 'a', 'b', 'b', 'c', 'd']

 

2. 첫 번째 filter

  - filter 메소드는 배열의 각 요소를 순회하며, 주어진 조건을 만족하는 요소들만을 새로운 배열에 포함시킵니다.

  - 여기서 조건은 각 문자가 문자열에서 한 번만 나타나는지 확인하는 것입니다.

 

3. 두 번째 filter

  - 내부 filter는 첫 번째 filter의 조건으로 사용됩니다.

  - 이 내부 filter는 현재 문자 el와 같은 문자를 찾기 위해 문자열 전체를 다시 순회합니다.

  - el => el === el2 조건을 통해 문자열 내에서 el과 같은 문자를 찾습니다.

  - 이 조건을 만족하는 문자들로 새로운 배열을 만듭니다.

[...s].filter(el2 => el === el2)

 

4. 중복된 문자의 개수 확인

  - 내부 filter가 변환한 배열의 길이를 확인합니다.

  - 이 배열의 길이가 1이면, 해당 문자는 문자열 's'에서 한 번만 나타나는 것입니다.

[...s].filter(el2 => el === el2).length === 1

 

5. 중복되지 않는 문자들만 포함

  - 첫 번째 filter는 내부 filter의 결과가 true인 문자들만을 포함합니다.

  - 즉, 내부 filter로 확인된 중복되지 않는 문자들만 첫 번째 filter의 결과로 남게 됩니다.

 

6. 정렬 및 문자열 변환

  - 중복되지 않는 문자들로 이루어진 배열을 sort 메소드를 사용하여 알파벳 순으로 정렬합니다.

  - 정렬된 배열을 join('')을 사용하여 하나의 문자열로 변환합니다.


예제

예를 들어, 문자열 s가 aabbcd 일 때

 

1. s를 문자 배열로 변환 ['a', 'a', 'b', 'b', 'c', 'd']

 

2. 첫 번째 filter는 각 문자를 순회합니다.

  - el 이 a일 때

    - 내부 filter : ['a', 'a', 'b', 'b', 'c', 'd'].filter(el2 => el2 === 'a')의 결과 ['a', 'a']

    - 길이 확인 : ['a', 'a'].length === 2 이므로 조건 불충족

 

  - el 이 b일 때

    - 내부 filter : ['a', 'a', 'b', 'b', 'c', 'd'].filter(el2 => el2 === 'b')의 결과  ['b', 'b']

    - 길이 확인 : ['b', 'b'].length === 2 이므로 조건 불충족

 

  - el 이 c일 때

    - 내부 filter : ['a', 'a', 'b', 'b', 'c', 'd'].filter(el2 => el2 === 'c')의 결과 ['c']

    - 길이 확인 : ['c'].length === 1 이므로 조건 충족, 'c' 포함

 

  - el 이 d일 때

    - 내부 filter : ['a', 'a', 'b', 'b', 'c', 'd'].filter(el2 => el2 === 'd')의 결과 ['d']

    - 길이 확인 : ['d'].length === 1 이므로 조건 충족, 'd' 포함

 

3. 첫 번째 filter 결과 ['c', 'd']

 

4. sort로 정렬

 

5. join('')으로 배열을 하나의 문자열로 변환 : "cd"

반응형
profile

Space

@Space_zero

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