반응형
문제 출처
https://www.acmicpc.net/problem/1065
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제 입력 1 복사
110
예제 출력 1 복사
99
예제 입력 2 복사
1
예제 출력 2 복사
1
예제 입력 3 복사
210
예제 출력 3 복사
105
예제 입력 4 복사
1000
예제 출력 4 복사
144
예제 입력 5 복사
500
예제 출력 5 복사
119
문제 풀이 힌트
1) 1~99 수는 모두다 한수다. 그래서 N이 그 사이 값이라면 그 값 그대로 return을 해주면 된다.
2) 100 ~999 사이 숫자는 첫번째 숫자와 두번째 숫자의 차이, 두번째 숫자와 세번째 숫자의 차이만 확인해주면 된다.
- 99까진 어처피 한수니까 바로 100부터 반복문을 돌려준다.
3) 1000은 한수가 아니니, 고려할 필요없다.
정답 풀이 코드
let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')
const N = Number(input.shift());
function solution(N){
if(N < 100){
return N;
}
let answer = 99;
for(let i=100; i<=N; i++){
let number = String(i);
let standardA = number[0] - number[1];
let standardB = number[1] - number[2];
if(standardA === standardB) answer++;
}
return answer;
}
const answer = solution(N);
console.log(answer);
의사 코드 추가
let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')
const N = Number(input.shift());
function solution(N){
if(N < 100){ //100이하의 수라면 그대로 N을 리턴한다.
return N;
}
let answer = 99;
for(let i=100; i<=N; i++){
let number = String(i); //문자로 바꿔줘야 숫자 하나하나 접근 가능하다.
let standardA = number[0] - number[1]; //첫번째 숫자와 두번째 숫자 차이 비교
let standardB = number[1] - number[2]; //두번째 숫자와 세번째 숫자 차이 비교
if(standardA === standardB) answer++; //차이가 같을 때 한수다.
}
return answer;
}
const answer = solution(N);
console.log(answer);
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
백준 1966: 프린터 큐 - javascript(구현) (1) | 2023.10.11 |
---|---|
백준 1389: 케빈 베이컨의 6단계 - javascript(bfs) (0) | 2023.10.03 |
백준 1316: 그룹 단어 체커 - javascript(구현) (0) | 2023.10.03 |
백준 1541: 잃어버린 괄호 - javascript(그리디) (0) | 2023.10.01 |
백준 4673: 셀프 넘버 - javascript (구현) (0) | 2023.10.01 |