일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준nodejs
- css기초
- 프로그래머스코테
- CSS
- 알고리즘
- HTML
- 코테
- 프로그래머스JS
- 백준
- 백준골드
- js코테
- 익스프레스
- 리액트댓글기능
- 다이나믹프로그래밍
- 백준구현
- 백준js
- 리액트커뮤니티
- 리액트
- 포이마웹
- 안드로이드 스튜디오
- 백준알고리즘
- dp알고리즘
- JS프로그래머스
- 자바스크립트
- 코딩테스트
- HTML5
- 백준구현문제
- 프로그래머스
- 몽고DB
- JS
- Today
- Total
개발새발 로그
[JS] 백준 1193번 : 분수찾기 본문
https://www.acmicpc.net/problem/1193
1193번: 분수찾기
첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.
www.acmicpc.net
풀이방법
1. 먼저 X(1 ≤ X ≤ 10,000,000) 이라는 것은 일반적인 완전탐색으로는 구할 수 없다.
2. 규칙을 찾아야한다.
3. 먼저 배열을 아래와 같이 보기 편하게 만들었다.
4. 위 배열을 보았을 때 아래와 같이 알아낼 수 있다.
-홀수 열과 짝수열마다의 규칙이 생긴다.
-홀수 열 : 분자가 5, 4, 3, 2, 1 로 내림차순이다.
-짝수 열 : 분자가 1, 2, 3, 4, 5 로 오름 차순이다.
- 분자 + 분모 = 열 번호 + 1 이다.
-즉 1/2 는1+2 = 2번째열 + 1 이다.
5. 위 규칙을 이용해서 N이 주어지면 그에 맞는 분수를 찾아야한다.
7.먼저 열 번호를 구하는 방법이다.
-1+2+3..를 누적하면서 주어진 N이 어디에 포함되는지 확인한다.
8.열번호를 구했다면 N이 해당 열번호의 그룹에 몇번째인지 알아야한다.
-지금까지 누적한 수 sum에 주어진 N을 빼면 현재 그룹에서 N이후의 숫자가 몇개인지 알 수 있다.
-그 숫자에 라인수, 즉 한 그룹에 있는 분수의 갯수를 빼면 몇번째 인지 알 수 있다.
->그리고 몇번째 수인지에 따라 분자 혹은 분모 하나가 결정된다.( 1번째이면 1/5 또는 5/1일 수 있다.)
-> 나머지 분자 혹은 분모를 찾는 방법은 분자 + 분모 = 열 번호 + 1 를 이용한다.
9.마지막으로 홀수번째인지 짝수번째인지를 검사해서 5/1인지 1/5인지를 검사하는 것이다.
-분자가 홀수번째는 오름차순 짝수번째는 내림차순이므로 이를 통해 구해진 분자 혹은 분모의 숫자를 확정짓는다.
내 제출
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let N = fs.readFileSync(filePath).toString().trim();
let sum=0;
let line=1;//line을 1+2+3...누적하면서 N이 몇번째 지그재그라인에있는지 확인한다.
while(1){
sum+=line;
//누적하는 sum보다 작은 순간이 N의 라인을 확인할 수 있다.
if(N<=sum){
let a=line-(sum-N);//만약 line이 5면 sum은 15이다. 거기서 주어진 N이 13이면 15-13=2 하고 line에 2를 빼준다.
let b=line+1-a; //a+b는 line수 +1 이므로 b=line+1-a 이다.
if(line%2==0){ //홀수와 짝수에 따라 a와 b의 값이 분자,분모에 반대로 들어가게 된다.
console.log(a+"/"+b);
}else{
console.log(b+"/"+a);
}
break;
}
line++;
}
💢어려웠던 점
1. 규칙을 빨리 찾아내지 못했다.
-홀수번째와 짝수번째의 오름차순 내림차순의 차이를 파악하지 못했다.
2. 분자혹은 분모를 구하기 위해서는 분자 혹은 분모 하나는 분명히 찾아내야했다. 이를 빨리 생각하지못했다.
- 분자 + 분모 = 열 번호 + 1 이 공식을 알아냈지만 분자 또는 분모 하나는 알아야 했다.
-지금껏 누적한 sum에서 주어진 N을 빼고 거기에 열번호를 빼면 됐었다.
'알고리즘 > 구현' 카테고리의 다른 글
[JS] 백준 7569번 : 토마토(3차원배열) - 구현문제 (0) | 2023.07.28 |
---|---|
[JS] 백준 10025번 : 적록색약 - 구현문제 (0) | 2023.07.27 |
[JS] 백준 17135 : 캐슬 디펜스 (0) | 2023.07.19 |
[JS] 백준 16235 : 나무 재테크 (0) | 2023.07.17 |