매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅
계속 프로그래머스 문제로 푸는 것에 한계를 느끼기도 했고, 모든 기업에서 프로그래머스 형태로만 코테를 보는 것은 아니기에 오늘은 다른 사이트에서 코테를 풀어보았다.
찾아보니 Leetcode도 있는 것 같고 HackerRank도 있는 것 같던데 오늘은 후자.
결론적으론 medium 레벨의 문제를 한시간 정도 잡고 늘어졌는데 풀지 못했다.
풀 수 있을까? 라는 생각으로 반신반의 하며 문제를 켰는데 우선 문제를 해석하는 데만 꽤 오랜 시간을 투입했고 문제를 풀지 못했던 결정적인 이유 역시 해석을 제대로 하지 못한 점이었다.
마방진 문제인데...
여러 해설들을 보더라도 '이렇게 푸는게 맞아?' 하는 약간의 짜증이 올라오기도..ㅎ
여튼 오늘 문제를 풀지는 못했지만 더 오랜 시간 지체할 수 없기에 간단하게 블로그에 해설글을 요약하고 마무리짓는다.
요즘 코테도, 과제도 너무 못해서 약간 마음이 꺾였는데... 다시 붙잡고 끌어올리는 수밖에.
개발 공부를 하면서 너무 큰 좌절감을 수시로 맛보는 것 같아 의욕이 좀 떨어진다.
다들 그럴까..? ㅎㅎ
3x3 마방진의 갯수는 한정적이라고 한다. 총 8개의 정해져있는 행렬밖에는 만들어낼 수 없다는 점.
따라서 8개의 마방진을 알고 있었던 사람이라면 사실 이 8개의 마방진을 나타내는 행렬을 통해 리턴해야 하는 숫자가 가장 최소인 경우의 수를 찾아내는 방식으로 풀 수 있었을 것이라고 본다.
하지만 나는 마방진도 모르는 마당에 문제까지 잘못 해석했으니;;
해설을 포함한 원본 블로그의 출처를 남기고 아래와 같이 소스코드를 포함한다.
function formingMagicSquare(s) {
// Write your code here
const standard = [];
standard.push([[8,3,4],[1,5,9],[6,7,2]]);
standard.push([[4,3,8],[9,5,1],[2,7,6]]);
standard.push([[6,1,8],[7,5,3],[2,9,4]]);
standard.push([[2,9,4],[7,5,3],[6,1,8]]);
standard.push([[2,7,6],[9,5,1],[4,3,8]]);
standard.push([[6,7,2],[1,5,9],[8,3,4]]);
standard.push([[4,9,2],[3,5,7],[8,1,6]]);
standard.push([[8,1,6],[3,5,7],[4,9,2]]);
let min = Number.MAX_VALUE;
for (let i = 0; i < 8; i += 1) {
let minCost = 0;
for (let j = 0; j < 3; j += 1) {
for (let k = 0; k < 3; k += 1) {
minCost += Math.abs(standard[i][j][k] - s[j][k]);
}
}
if (min > minCost) {
min = minCost;
}
}
return min;
}
자바스크립트에서 표현할 수 있는 가장 큰, 최대 숫자값은 Number.MAX_VALUE
와 같이 표현 가능하다고 한다. 이번에 처음 알았음!
이렇게 표현된 값을 min으로 두고, 마방진으로 결정되어 있는 3x3 행렬과 입력값 s의 각 값들의 차를 비교하면서 최소값을 구해나가는 과정이라고 볼 수 있다.
마방진을 알고 모르고를 떠나서 어쨌든간에 주어진 문제는 풀어내야 하는 숙명을 가진 인간이기에 (ㅠㅠㅋ) 내일도 어김없이 코딩테스트 가즈아!
230125 Forming a Magic Square refers to a mathematical puzzle or game in which a 3x3 grid of numbers is arranged so that the sum of each row, column, and diagonal is the same. Here you get Corporate magician and learn more new ways for magician services. This sum is known as the magic constant. The puzzle is solved by finding the correct arrangement of the numbers to achieve this goal. This type of puzzle has been known since ancient times and is still popular today as a recreational and educational activity.