티스토리 뷰
keyword : 등차수열
difficulty : 실버4
completion : ✅
notice :
한수
📝 문제
어떤 양의 정수 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
🔍 정답
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int cnt = 0;
for (int i = 1; i <= N; i++) {
if (cd(i)) {
cnt++;
}
}
System.out.println(cnt);
}
public static boolean cd(int i) {
char[] ch = Integer.toString(i).toCharArray();
if (ch.length == 1 || ch.length == 2) return true;
int diff = ch[0] - ch[1];
if (ch[1] - ch[2] == diff) return true;
else return false;
}
}
<처음에 네자릿수까지 생각해서 짰던 boolean cd 메서드>
public static boolean cd(int i) {
char[] ch = Integer.toString(i).toCharArray();
if (ch.length == 1 || ch.length == 2) return true;
int diff = ch[0] - ch[1];
int idx = 1;
while (true) {
if (ch[idx] - ch[idx+1] == diff) {
idx++;
} else {
return false;
}
return true;
}
}
}
- 문제가 헷갈린다면 아래를 참고!
1: 1하나 뿐이니까 등차수열
2: 같은경우
3: 같은경우
....
10: 길이가 2고 각항이 1 0 인 수열. 공차가 -1인 등차수열. 체크- 길이가 2이고 각항이 1 1 인 수열. 공차가 0인 등차수열.체크
...
100: 길이가 3이고 각항이 1 0 0 인 수열. 등차수열이 아님
101:길이가 3이고 각항이 1 0 1 인 수열. 등차수열 아님
...
123: 길이가 3이고 각항이 1 2 3 인 수열. 공차가 1인 등차수열. 체크
- 길이가 2이고 각항이 1 1 인 수열. 공차가 0인 등차수열.체크
- 1부터 N까지의 숫자를 한 번씩 넣어서 등차수열이면 true를 반환하고 카운팅을 하고 아니면 false를 반환!
- boolean cd 메서드는 int를 받아서 char 배열에 넣어주고
- 한자릿수(초항만 있는 상태)와 두자릿수는 무조건 한수이므로 char배열의 길이 1과 2면 무조건 true를 리턴!
- 확인할 것은 세자릿수부터 1000까지인데,
- diff라는 변수에 0번 인덱스와 1번 인덱스의 차이를 넣어주고
- 1번 인덱스와 2번 인덱스의 차이가 그것과 같다면 등차수열로 보고 아니면 등차수열이 아닌 것임
- 처음에 조건이 1000까지라는 것을 잊고 네자릿수 이상일 경우까지 생각해서 while문으로 인덱스 비교하는 코드를 짰었으나 정답을 제출하고나서 다른 풀이를 보고 1000까지라는 것을 깨달았고,
- 1000은 1번 인덱스와 2번 인덱스가 diff와 다르므로 바로 false로 반환 되기 때문에 세자릿수인 999까지만 확인하면 되었다.
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 동전 0(백준11047번)_실버4_반복문_조건문 (0) | 2022.11.10 |
---|---|
[알고리즘] 괄호(백준9012번), 스택(stack), 실버4(silver4), 자바(java) (0) | 2022.11.06 |
[알고리즘] 요세푸스 0(백준11866번) (0) | 2022.11.02 |
[알고리즘] 단어정렬(백준1181번) (0) | 2022.10.26 |
[알고리즘] 크로아티아 알파벳(백준2941번) (1) | 2022.10.23 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SQLD
- 자바bfs
- 알고리즘
- 자바트리
- JavaScript
- Nest
- 이분탐색
- DP
- 정렬
- dfs
- CS
- BFS
- 자바
- 리액트
- JPA
- Comparator
- 자바스크립트
- java
- 백준
- SQL
- Spring
- 프로그래머스
- 자바dp
- 형변환
- Queue
- 타입스크립트
- 스프링
- Algorithm
- 해시맵
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함