[백준 알고리즘] 1065: 한수 풀이(자바)

2021. 8. 25. 19:19·Problem Solving/백준
문제

https://www.acmicpc.net/problem/1065

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

 

코드
import java.util.Scanner;

//등차수열: an = a1 + (n - 1)d

class Test {
	int num = 0;
	int gap = 0;
	int cnt = 0;	//한수의 갯수 카운트
	
	void hanSoo(int n) {
		if(n < 100) {	//n이 1~99일 때는 무조건 카운트 1씩 증가
			for(int i = 0; i < n; i++)
				cnt++;
		} else {	//ex.n = 203
			cnt = 99;	//기본으로 99개 깔고 시작
			
			for(int i = 100; i <= n; i++) {
				int one = i / 100;	//3 
				int hund = (i % 100) / 10;	//0
				int thou = (i % 100) % 10;	//2
				
				if(hund - one == thou - hund)
					cnt++;
			}
		} 
		System.out.println(cnt);
	}
}

public class Main {
	public static void main(String[] args) {
		Test test = new Test();	//객체 생성
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		
		test.hanSoo(n);
		
		sc.close();
		
	}
}

 

코드 설명
if(n < 100) {
	for(int i = 0; i < n; i++)
		cnt++;
}

 1 ~ 99까지는 무조건 한수이므로 무조건 카운트한다. 

100부터 등차수열 조건을 매겨 한수의 개수를 카운팅하면 된다. 

else {
	cnt = 99;	//기본으로 99개 깔고 시작
}

 

이제 else에 들어갈 한수 카운팅 공식 구하기.

for(int i = 100; i <= n; i++) {
	int one = i / 100;	//3 
	int hund = (i % 100) / 10;	//0
	int thou = (i % 100) % 10;	//2
}

다음 공식을 거쳐 일의 자리, 백의 자리, 천의 자리 정수를 분리한다. 

만약 n이 203이라면, one = 3, hund = 0, thou = 2가 저장된다.

 

 

등차수열 공식

an  = a1 + (n - 1)d

 

등차수열 공식에 의해,

1번째 항과 2번째 항은 d만큼 차이가 나야 하고,

3번째 항과 4번째 항 역시 d만큼 차이가 나야 한다.  

 

이제 1000의 자리수 = 1번째 항, 100의 자리수 = 2번째 항, 100의 자리수 = 3번째 항, 1의 자리수 = 4번째 항 으로 보고, 이를 이용해 100부터 i의 수를 하나씩 증가시켜 가며 한수를 구한다. 

if(hund - one == thou - hund)
	cnt++;

 

 

마무리

등차수열의 기본 원리를 파악하고 있어야 풀 수 있었던 문제.
0과 첫번째 항의 차이까지 고려해 가며 문제를 풀다 시간 낭비를 많이 했다. 
추가로 1 ~ 99까지는 무조건 한수인데 10부터 한수를 찾겠다고 해보다가 또 시간 낭비...

문제 풀기 전에 주어진 조건을 꼼꼼히 확인하고 기본 공식이나 원리 등은 알고 문제를 풀어야겠다.

저작자표시 비영리 변경금지 (새창열림)

'Problem Solving > 백준' 카테고리의 다른 글

[백준|자바] 11809: 알파벳 찾기  (0) 2021.08.26
[백준 알고리즘] 11720: 숫자의 합 풀이(자바)  (0) 2021.08.25
[백준 알고리즘] 11654: 아스키 코드 풀이(자바)  (0) 2021.08.25
[백준 알고리즘] 15596: 정수 N개의 합 풀이(자바)  (0) 2021.08.03
[백준 알고리즘] 4344: 평균은 넘겠지 풀이(자바)  (0) 2021.08.03
[백준 알고리즘] 8958: OX퀴즈 풀이(자바)  (0) 2021.08.02
'Problem Solving/백준' 카테고리의 다른 글
  • [백준 알고리즘] 11720: 숫자의 합 풀이(자바)
  • [백준 알고리즘] 11654: 아스키 코드 풀이(자바)
  • [백준 알고리즘] 15596: 정수 N개의 합 풀이(자바)
  • [백준 알고리즘] 4344: 평균은 넘겠지 풀이(자바)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    AWS
    d3
    클론 프로젝트
    자바스크립트
    Jiraynor Programming
    컴퓨터네트워크
    ZeroCho
    프로젝트
    웹사이트
    블로그 제작
    React
    포트폴리오
    자바
    백준
    프로그래머스
    구현
    파이썬
    Next.js
    mysql
    Til
    리액트
    강의내용정리
    SWEA
    뉴렉처
    알고리즘
    공식문서
    spring boot
    bfs
    타입스크립트
    플러터
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[백준 알고리즘] 1065: 한수 풀이(자바)
상단으로

티스토리툴바