Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 랜덤스쿼드
- 안드로이드#앱만들기#알바
- 강아지 스마트 펜스
- D-ID
- 피온4
- 안녕 디지몬
- fifaonline
- #FIFAONLINE4
- 혼술 술자리 인싸앱
- Ai
- 스쿼드 메이커
- 안드로이드 #앱개발#계산기
- Java & SpringBoot로 시작하는 웹 프로그래밍
- 독서감상문
- K디지털크레딧
- 패스트캠퍼스
- 안드로이드
- 자바 인강
- 불끌때
- fifaonline4
- 내일배움카드
- 부르지마세요
- 박스#강아지집#만들기
- 부의감각
- 바이트디그리
- 강아지 #박스집 #복층
- 홈CCTV
- 랜덤
- 안드로이드 그림판#그림메모장#낙서장
- 아두이노#작품#사료급식기
Archives
- Today
- Total
LC Studio
백준 1065 한수 (JAVA) 본문
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
복잡했지만 차근차근 식을 세워 풀어보았다.
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 lastSum = 0; //최종 값
for(int i=1;i<=N;i++){
int A = d(i); //d()함수 호출
lastSum = lastSum + A; //최종값에 A 더하기
}
System.out.println(lastSum); //최종출력
}
public static int d(int number){
int num = number; //main 함수에서 받아온 i값 num에 저장
int sum = 0;
if(num<100){ //100보다 작으면 무조건 한수이기때문에 1 return
return 1;
}
else{
String st = Integer.toString(num);
int[] array = new int[st.length()]; //num의 길이를 알아내 배열생성
int i = 0;
while(num != 0){
array[i] = num%10; //한 자리씩 저장
num = num/10;
i++;
}
for(int j=0;j<st.length()-2;j++){
if(array[j+1] - array[j] == array[j+2]-array[j+1]){ //인접한 2항의 차가 같다면
sum = sum + 1; //sum을 ++
}
}
if(sum/(st.length()-2) == 0){ //위의 if문에서 모두 true여서, 딱 나누어 떨어진다면
return 1; //1 return
}
else{
return 0;
}
}
}
}
위와같이 설계해 보았지만 잘 작동하지 않았다...
결국 다른 블로그를 참고해 보았다.
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 A = d(N); //d()함수 호출
System.out.println(A); //최종출력
}
public static int d(int number){
int num = number; //main 함수에서 받아온 i값 num에 저장
int cnt = 0; //한수의 개수
if(num<100){ //100보다 작으면 무조건 한수이기때문에 return num
return num;
}
else{
cnt = 99;
if(num==1000){ //자리수 계산을 위한 예외처리
num = 999;
}
for(int i=100;i<=num;i++){
int hun = i/100;
int ten = (i/10)%10;
int one = i%10;
if((hun-ten) == (ten-one)){
cnt++;
}
}
return cnt;
}
}
}
아... 아쉽다
기본적으로 생각한 방향이 같았는데, 문제를 자세히 분석하지 않아 너무 어렵게 풀었다.
1000까지라고 문제에서 말해줬는데, 너무 광범위하게 생각하다보니 식이 복잡해 진 것 같다.
다음부터는 문제를 더 철저히 분석해야겠다.
반응형
'Java > 백준 알고리즘' 카테고리의 다른 글
백준 2908번 상수 (JAVA) (0) | 2022.03.17 |
---|---|
백준 1157 단어공부 (Java) (0) | 2022.03.17 |
백준 4673 셀프 넘버 JAVA (0) | 2022.03.15 |
백준 4344 평균은 넘겠지 (Java) (0) | 2022.03.15 |
백준 8958번 (JAVA) (0) | 2022.03.14 |