상세 컨텐츠

본문 제목

[프로그래머스] 최빈값 구하기

Programming/Algorithm

by 겨리! 2022. 11. 14. 23:23

본문

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

 

프로그래머스

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

programmers.co.kr

Q. 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

 

function solution(array) {
    const result = array.reduce((accu, curr)=>{
        accu[curr] = (accu[curr] || 0)+1;
        return accu;
    }, {});
    const max = Math.max(...Object.values(result));
    const answer = Object.keys(result).filter(key => result[key] === max);
    
    // answer 배열에는 string 타입은 값이 들어가 있으니 정수로 형변환 필요
    return answer.length === 1 ? Number(answer[0]) : -1;
}

 

result[x] = (result[x] || 0) + 1; 를 풀어쓰면 아래의 코드가 된다.

e.g. const array = ['a', 'b', 'b', 'c'];

if(result[x])	{
	result[x] = result[x] + 1;
}else {
    result[x] = 0 + 1;
}

/*
처음 배열의 첫번째 값 'a'가 들어오면 result[x](=result.a)는 undefined
그러므로 result에 a라는 속성을 추가하고 0+1의 값인 1을 세팅.

그 후 배열의 두번째 값인 'b'가 들어오면 앞의 로직처럼 
result에 b라는 속성을 추가하고 1을 세팅.

세번째 값인 'b'가 들어오면
result.b의 값이 1이므로 result.b + 1을 수행.
result.b의 값은 2가 된다.
*/

 

'한 번만 등장만 문자'도 같은 로직으로 풀 수 있음 !

 

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

 

프로그래머스

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

programmers.co.kr

 

Q. 문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

 

function solution(s) {
    const arr = s.split('');
    const result = arr.reduce((accu, curr)=>{
        accu[curr] = (accu[curr] || 0)+1;
        return accu;
    }, {});
    const min = Math.min(...Object.values(result));
    const answer = Object.keys(result).filter(key => result[key] === 1);
    // 문자열은 sort() 만 해줘도 오름차순으로 정렬됨!!!!잊지말기
    return answer.sort().join('');
}

관련글 더보기

댓글 영역