Minimum Number of Moves to Seat Everyone & Maximum Odd Binary Number

Guk's.velog·2024년 6월 13일
0

코딩테스트

목록 보기
14/22

문제 : Minimum Number of Moves to Seat Everyone

무작위 값으로 만들어진 두 배열을 주고, 가장 근사치에 해당하는 값들의 합을 구하는 문제이다.

즉, seats = [3,1,5] 와 stduents = [2,7,4] 에서 근사치들에 해당하는 값을 구하는 것인데
해당 예시에 따른 예를 들어보자면,

  • 처음 학생의 위치는 2이므로 가장 가까운 1의 좌석으로 이동한다.
  • 두번째 학생의 위치는 7이므로 가장 가까운 5의 좌석으로 이동한다.
  • 세번째 학생의 위치는 4이므로 가장 가까운 3의 좌석으로 이동한다.

풀이

두 배열을 오름차순으로 정렬하고 각 배열들의 차이를 더해서 return 한다

var minMovesToSeat = function(seats, students) {
    seats.sort((a,b) => a-b)
    students.sort((a,b) => a-b)

    let move = 0
    for(var i = 0 ; i < seats.length ; ++ i){
        move += Math.abs(seats[i] - students[i])
    }

    return move
};

문제 : Maximum Odd Binary Number

0과 1의 숫자값으로 이루어진 문자열 하나를 주고 가장 큰 홀수 값을 찾는 문제이다. 이때 1은 최소 한개 이상이다.

접근방법

문자열에서 '1'에 해당하는 개수를 먼저 세기로 해본다. python에는 s.count('1')과 같은 함수가 있으나 javascript에는 해당 함수가 없으므로 직접 만들어야 한다.

function countOnes(s) {
    return (s.match(/1/g) || []).length;
}

이렇게 해서 1의 개수를 세어준 후 다음과 같은 풀이를 통해서 진행한다.

풀이

var maximumOddBinaryNumber = function(s) {
    let result = ''
    const oneCount = countOnes(s) - 1

    //하나를 제외한 1의 개수를 더함
    for(let i = 0 ; i < oneCount ; ++i){
        result += '1'
    }

    //그 결과에 나머지 0들을 더함
    for(let i = oneCount ; i < s.length - 1 ; ++i){
        result += '0'
    }

    //맨마지막에 1 더함
    return result + '1'
};

0개의 댓글