뚱땅뚱땅

[문제] 백준 1065번 한수 (쉬운 문제를 너무 복잡하게 풀었다) 본문

알고리즘/백준

[문제] 백준 1065번 한수 (쉬운 문제를 너무 복잡하게 풀었다)

양순이 2021. 1. 19. 20:35
728x90

* 백준 단계별로 풀어보기: 함수편

 

 

 

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int sum = 0;
		
		for(int i=1;i<=n;i++) {
			sum += hansu(Integer.toString(i));
		}
		
		System.out.println(sum);
	}
	static int hansu(String s) {
		int len = s.length();
		int diff = 0;
		boolean check = false;
		
		for(int i=0;i<len;i++) {
			if(len == 1 || len ==2) return 1;
			
			if(i==0) {
				diff = toNum(s.charAt(i)) - toNum(s.charAt(i+1));
				continue;
			}
			if(i+1 <len) {
				int d2 = toNum(s.charAt(i)) - toNum(s.charAt(i+1));
				
				if(diff == d2) {
					check = true;
				}
				else{
					check = false;
					break;
				}
			}
		}
		if(check) return 1;
		else 	return 0;
	}
	
	static int toNum(char c) {
		return c-'0';
	}
}

 

너무나도 간단한 문제를... 너무 복잡하게 생각했다. 그래서 답을 제출한 다른 사람들보다 시간과 메모리가 더 크다..

 

아래가 최적화된 코드인 듯 하다.

import java.io.*;
import java.util.*;

public class Main {
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int X = Integer.parseInt(st.nextToken());
		
		int answer = 99;
		
		if(X<100) System.out.println(X);
		else {
			for(int i=100;i<=X;i++) {
				if(i==1000) continue;
				int a = i % 10;	//1의 자리
				int b = (i/10)%10;	// 10의 자리
				int c = i/100;	// 100의 자리
				
				if(a-b == b-c) answer++;
			}
			System.out.println(answer);
		}
	}
}
728x90
Comments