프로그래머스 | Lv.2_연습문제_Part.3_JS

김명성·2021년 12월 2일
0

Algorithm

목록 보기
56/61
post-thumbnail

난이도 : Level. 2
언어 : Javascript
출제 내역 : 연습문제

전체 풀이 코드 👈🏻 클릭시 Github로 이동

❓ Question 1

땅따먹기

  • 땅따먹기 게임에서 가장 높은 점수는?

📝 My Solution 1

function solution(land) {
    let result =  Math.max(...land[0])
    let standard = land[0].indexOf(result)
        for (let i = 1; i<land.length; i++) {
            land[i][standard] = 0;
            let nextNum = Math.max(...land[i])
            result = result + nextNum;
            standard = land[i].indexOf(nextNum)
        }
    return result;
}

기존에 사용한 코드로는 테스트 문제는 해결 됐지만,
제출한 코드에서는 전부 맞지 않는 현상이 벌어졌습니다.

중복된 값이 있는 행이 있을 경우 때문인데요
그래서 코드를 좀 수정해 보았습니다.

function solution(land) {
    for (let i = 1; i<land.length; i++) {
        land[i][0] += Math.max(land[i-1][1],land[i-1][2],land[i-1][3])
        land[i][1] += Math.max(land[i-1][0],land[i-1][2],land[i-1][3])
        land[i][2] += Math.max(land[i-1][0],land[i-1][1],land[i-1][3])
        land[i][3] += Math.max(land[i-1][0],land[i-1][1],land[i-1][2])
    }
    const result = land[land.length-1].sort((a,b) => a-b)
    return result[result.length-1]
}

중복되는 인덱스의 값은 더할 수 없기 때문에
해당 인덱스를 제외한 값 중 가장 큰 값을 다음 배열 값에 더해줍니다.
그렇게 해서 나온 마지막 배열에서 가장 큰 값을 결과값으로 해줍니다.

결과


❓ Question 2

올바른 괄호

  • 올바른 괄호가 있는 문자열인지 확인

📝 My Solution 2

기존 코드

기존에 풀었던 알고리즘 문제 중 비슷한 문제가 있어
replace를 활용한 방법으로 문제를 해결했는데,
정확도에서는 맞았지만, 효율성에서는 통과를 못해 다른 방법을 택했습니다.

function solution(s) { 
    const arr = s.split(""); 
    let t = 0; 
        for (let i=0; i<arr.length; i++) { 
            if (arr[i] == "(") {
                t++; 
            } else { 
                t--; 
            } 
            if (t < 0) { 
                break; 
            } 
        } 
    return t == 0 ? true : false; 
}

먼저 주어진 문자열을 배열로 만들고,
0이 되면 올바른 괄호라고 판단하는 반복문을 만드는데,
이 때, 시작하는 문자가 닫히는 것으로 시작하면
바로 false를 출력하도록 하도록 구성한다.

결과


❓ Question 3

다음 큰 숫자

  • 어떤 수를 2진법으로 변경했을 때, 같은 1의 갯수가 있는 다음 큰 숫자 찾기

📝 My Solution 3

const checkNum = (num) => {
    const ones = num.toString(2).split('').filter(data => data === "1")
    return ones.length
}

우선 이진법으로 변경한 부분에서 1의 갯수가 몇개 인지를 아는
함수를 하나 만들어 둡니다.

function solution(n) {
    let standard = checkNum(n)
        for (let i = n+1; i < n**2; i++) {
            if (standard === checkNum(i)) {
                return i;
                break;
            }
        }
}

그 후, 기준이 되는 변수를 하나 만들어 주고,
반복문을 이용해 조건과 일치하는 숫자를 도출해 줍니다.

결과


참고 한 글

profile
잠재력은 핵폭탄급 Frontend Developer

0개의 댓글

관련 채용 정보