-
문제
https://www.acmicpc.net/problem/2659
2659번: 십자카드 문제
입력은 한 줄로 이루어지며, 이 한 줄은 카드의 네 모서리에 씌여있는 1 이상 9 이하의 숫자 4개가 시계 방향으로 입력된다. 각 숫자 사이에는 빈칸이 하나 있다.
www.acmicpc.net
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