티스토리 뷰

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

 

프로그래머스

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

programmers.co.kr

 


 

function solution(s) {
    const words = {}
    for(let i of s) {
        if(!words[i]) {
            words[i] = 1
        } else {
            words[i] = words[i] + 1
        }
    }
    const once = Object.entries(words).map(word => {
        if(word[1] === 1) return word[0]
    })
    return once.sort().join('')
}
  1. s가 몇 번 들어갔는지 체크할 words 객체 생성
  2. s 문자열을 모두 순회
    1. words에 해당 문자열이 없을 경우, 최초 등장한 것이므로 1 담음
    2. words에 해당 문자열이 있을 경우, 이미 등장했던 것이므로 기존 숫자에 +1
  3. words 안의 key와 value를 배열로 만들어 map()으로 순회
    1. value(1번째 인덱스)가 1이면 key(0번째 인덱스)를 return
  4. 3번에서 반환된 새로운 배열(once)을 sort()로 정렬 후 join('')으로 결합하여 문자열 반환

 

인상 깊었던 다른 사람의 풀이

* indexOf : 앞에서부터 찾아서 주어진 요소가 존재할 경우 해당 인덱스 반환
* lastIndexOf: 뒤에서부터 찾아서 주어진 요소가 존재할 경우 해당 인덱스 반환 

function solution(s) {
    const result = []
    for(let a of s) {
        if(s.indexOf(a) === s.lastIndexOf(a)) {
            result.push(a)
        }
    }
    return result.sort().join('')
}
  1. result 배열 생성
  2. s 문자열을 모두 순회
    1. 첫번째 요소를 반환하는 indexOf와 마지막 요소를 반환하는 lastIndexOf가 같다면
      s 문자열 내에 해당 요소가 유일하다는 뜻 => result에 push
  3. result를 sort()로 정렬 후 join('')으로 결합하여 문자열 반환

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함