-
문제
https://www.acmicpc.net/problem/2659
How to Solve ?
문제에 대한 이해
주어진 숫자로 만들 수 있는 최소의 시계수가 전체 시계 수중에서 몇 번째로 작은지 출력하라.
풀이 방법 ( 완전 탐색 )
1) 모든 시계 수를 만들어라.
처음에는 주어진 수를 바탕으로 시계수를 만들고, 그 중에서 특정한 값이 몇 번째로 위치했는지 찾는거라서 문제가 올바르게 이해가 안됬지만, 읽다보니 모든 시계수를 만들라는 이야기를 확인 할 수 있었다.
시계수의 특징은 1~9 의 수로만 만들 수 있기에 모든 수는 0이 포함 되면 안되기 때문에 1111 ~ 9999 까지 루프를 돌면서 자리 중에 0이 포함된 경우 배열에 담지 않으면 된다.
function getAllClockNum() { const arr = []; for (let i = 1111; i <= 9999; i++) { let one = ((i % 1000) % 100) % 10; let ten = Math.floor(((i % 1000) % 100) / 10); let hundred = Math.floor((i % 1000) / 100); if (one === 0 || ten === 0 || hundred === 0) { continue; } arr.push(i); } return arr; }
2) 주어진 숫자로 시계 수를 만들어라.
주어진 숫자로 시계 수를 만드는 법은 간단하다. 시계 방향으로 간다고는 했지만 이러한 패턴은 배열의 가장 앞의 값을 뒤로 밀어주면
해결이 가능하다.
이 후에 만들어진 배열을 정렬하면 시계 수와 그 최소 값이 무엇인지 찾아 낼 수 있다.
function getSelectedClockNum(nums) { const arr = []; for (let i = 0; i < nums.length; i++) { let tmp = Number(nums.join("")); nums.push(nums.shift()); arr.push(tmp); } arr.sort(); return arr; }
3) 몇 번째로 작은지 출력
이후에는 모든 시계 수 배열을 돌면서 몇 번째 인덱스에 있는지 확인 !
전체코드
function getAllClockNum() { const arr = []; for (let i = 1111; i <= 9999; i++) { let one = ((i % 1000) % 100) % 10; let ten = (i % 1000) % 100; let hundred = i % 1000; if (one === 0 || ten === 0 || hundred === 0) { continue; } arr.push(i); } return arr; } function getSelectedClockNum(nums) { const arr = []; for (let i = 0; i < nums.length; i++) { let tmp = Number(nums.join("")); nums.push(nums.shift()); arr.push(tmp); } arr.sort(); return arr; } function solution() { const clock_all = getAllClockNum(); const clock_selected = getSelectedClockNum(nums); for (let i = 0; i < clock_all.length; i++) { if (clock_selected[0] === clock_all[i]) { console.log(i); } } } const nums = ["2", "1", "1", "2"]; solution();
'PS > 백준' 카테고리의 다른 글
[ 백준 _ 15271 ] 번데기 by using JavaScript (0) 2021.06.27 [ 백준_2644 ] 촌수계산 ( bfs - 자바스크립트 ) (0) 2021.06.27 [ 백준_16953 ] A -> B ( d/bfs - 자바스크립트 ) (0) 2021.06.25 [백준_1713] 후보 추천하기 ( 시뮬레이션 - 자바스크립트 ) (0) 2021.06.17 [백준_20365] 블로그2 ( 그리디 - 자바스크립트 ) (0) 2021.06.17 댓글