일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- camera
- 꽃
- 50mm
- 18-35mm
- 니콘
- AF-S 18-35mm
- 출사
- D750
- 경치
- af-s 18-35
- nikkor
- daily
- Nikon
- 일상
- 85mm 1.8g
- 50mm f/1.8G
- 푸초
- 풍경
- 사진
- AF-S NIKKOR 18-35mm f/3.5-4.5G ED
- AF-S NIKKOR 85mm f/1.8G
- Photo
- 렌즈
- 하늘풍경
- AF-S NIKKOR 50mm f/1.8G
- 푸른초장교회
- spring
- 85mm f/1.8G
- 여름성경학교
- 카메라
- Today
- Total
병갈이 블록
HackerRank - Forming a Magic Square 본문
www.hackerrank.com/challenges/magic-square-forming/problem
문제.
3 X 3 마방진을 준다. 다만 해법이 아닌 값이 들어있는 마방진이다. 마방진의 해법 중 주어진 입력 마방진의 각각의 위치의 값들과 해법 값들의 차이의 절대값의 최소한의 합을 리턴하는 문제이다.
ex>
- 입력 마방진.
5 3 4
1 5 8
6 4 2
- 해법 마방진
8 3 4
1 5 9
6 7 2
** 두 마방진에서 각각의 포지션의 값이 서로 틀린 값들의 차이의 절대값을 합한다.
=> |5-3| + |8-9| + |4-7| = 7을 리턴.
직면한 문제.
1. 마방진에 대해서 이해는 했으나 풀어갈 방법을 너무 로직적으로 풀려고만 함. -> 이게 너무 경우의 수도 많고 처리해야할 로직도 많고...;;;;
2. 중요한 것은 3X3 마방진의 경우 그 결과가 제한 된 수만 가진다. 마방진이 유효한 경우의 수는 기본으로 풀어진 하나의 값을 시계방향으로 90도 회전한 4가지의 경우와 회전된 각각의 경우에서 1을 중심으로 좌우 or 위아래 반전한 케이스가 존재한다. 즉, 4 X 2 = 8가지 경우가 존재함으로....그냥 비교대상을 하드코딩 해두고 전부 비교하는게 훨씬 좋은 해결책이었다.
나의 문제점.
로직적으로만 해결하려고 했던 점...이게 큰 오산이었다. 최선의 해법을 구하는 방법을 로직으로 구현할 수 있나..??? 이걸 하려고 했다..;;;
근본적으로는 마방진에 대해 수학적인 이해나 그 한계를 고민을 먼저 하지 않았던 것 같다.
최선의 해법이 무한개는 아니지만(값의 한계가 있으니) 꽤나 많을것이라고 생각했다.
그냥 생각으로 중앙에 5가 와야하고 제한적일 것 같다는 생각만 했었는데...그걸 우선 증명을 먼저 했더라면 위와같은 객기는 부리지 않았을 것 같다.
꼭, 로직으로 푸는것에 집중하는 것 보다, 주어진 문제의 조건이 로직 외적으로 간단히 정리가 가능 한 부분인지를 우선 찾아보는것도 좋은 방법이다. 잊지말자!!
'개발공부 이야기(New) > 알고리즘' 카테고리의 다른 글
HackerRank - Largest Permutation (0) | 2021.02.06 |
---|---|
HackerRank - Beautiful Pairs (0) | 2021.02.06 |
HackerRank - Between Two Sets (0) | 2021.02.04 |
HackerRank - 랭크 매기기. (0) | 2021.02.04 |
big-O 개념 이해하기. (0) | 2021.01.22 |