JS/코테

JS, 프로그래머스 - 나머지 한 점

Hyeon_E 2024. 5. 5. 01:53

다양한 문제를 풀어보자!! 다각도로 문제를 보자!!

 

https://school.programmers.co.kr/learn/courses/18/lessons/1878

 

프로그래머스

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

programmers.co.kr

 

문제는

직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다.

 

function solution(v) {
    let result = []
    for(let i=0; i<v[0].length; i+=1){
        if(v[0][i] === v[1][i]) result.push(v[2][i])
        else if(v[0][i] === v[2][i]) result.push(v[1][i])
        else result.push(v[0][i])
    }
    return result
}

 

처음에는 조건문을 이용해서 하드코딩하였는데 이렇게 코드를 작성했을 경우 문제가 복잡해지면 조건문도 많아지고 예외사항이 많아지기 때문에 좋지 못한 방식이라고 생각해 다른 방법을 모색하게 됨

 

function solution(v) {
    const x = v[0][0] ^ v[1][0] ^ v[2][0]
    const y = v[0][1] ^ v[1][1] ^ v[2][1]
    
    return [x, y]
}

 

논리연산자 XOR(^)를 사용한 방법

XOR 연산자는 서로 값이 다를 때 참을 반환하고 값이 같다면 거짓을 반환함

 

위에서는 세 값 중 두개가 같고 나머지 하나가 다르기 때문에 해당 다른 값을 반환함

만약  3 ^ 3 ^ 3 ^ 3 ^ 3 ^ 5 ^ 5일 경우 둘씩 짝지어 짝꿍이 없는 3을 반환하는 것

해당 논리연산자를 조건문을 많이 쓸 필요 없어 코드가 간결해지고 시간도 단축됨!!

 

function solution(v) {
    let result = []
    
    for(let i=0; i<v[0].length; i+=1){
        const dot = v[0][i] ^ v[1][i] ^ v[2][i]
        result.push(dot)
    }
    
    return result
}

 

function solution(v) {
    let result = []
    
    for(let i=0; i<v.length; i+=1){
        result[0] ^= v[i][0] 
        result[1] ^= v[i][1]
    }
    
    return result
}

코드가 여러모로 쓰일수 있을려면 하드 코딩이 아니어야 함

좌표가 2개가 아니라 더 많아질다면 직접 대입보다 반복문을 쓰는 것이 좋겠지란 생각해서 나온 최종 답변

 

😉🤔

반복문과 조건문에 의지를 안해야지 하고 싶은데 쉽지 않음... 반복문은 효율과 관계가 있으니 의도적으로 줄이려고 노력하는데 처음풀때는 역시 조건문을 이용한 하드코딩이 아직은 더 쉽게 느껴짐. 이번 XOR를 알게 되니 코드가 드라마틱한 변화를 보인것을 보곤 난 아직 멀었군 하고 자신을 돌아보는 계기 되었음... map과 set은 이제 조금 익숙해졌다고 생각했는데 생각지도 못한 XOR이라니 역시 코테는 다양한 문제를 반복해서 푸는 것이 중요해 보임