JS, 프로그래머스 - 나머지 한 점
다양한 문제를 풀어보자!! 다각도로 문제를 보자!!
https://school.programmers.co.kr/learn/courses/18/lessons/1878
문제는
직사각형을 만드는 데 필요한 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이라니 역시 코테는 다양한 문제를 반복해서 푸는 것이 중요해 보임