[알고리즘] 백준 알고리즘 함수

Posted by 신희준 on February 15, 2018


2018 - 02 - 15 (목)


백준알고리즘 함수


문제이름 : 셀프넘버 문제번호 : 4673 [https://www.acmicpc.net/problem/4673]

Post Sample Image

  • 즉 생성자가 없는 숫자를 셀프넘버라고 하며
package example2;

public class Example2 {
	public static void main(String args[]) {
		boolean self[] = new boolean[10000];	//default 값이 false 이다.
		for(int i = 1 ; i <= 10000; i++) {
			self[selfCount(i)] = true; // 1부터 10000까지 생성자가 될 수 있는 숫자의 경우 해당 숫자를 구하고 해당 숫자번째 배열에 TRUE 값을 넣어준다.
		} //이 연산이 끝나면 배열안에 false 값을 가진 순번이 셀프넘버가 된다.
		for(int i = 0 ; i < self.length ; i++) {
			if(self[i] == false) {		
				System.out.println(i);
			}
		}
	}
	public static int selfCount(int num) {
		String temp = String.valueOf(num);
		for(int i=0; i < temp.length(); i ++) {
			num += temp.charAt(i) - 48; // - 48을해주는이유는 아스키코드 48이 0이므로 숫자로 만들어주기 위함이다.
		}
		if(num >= 10000) {
			return 0;
		} else {
			return num;
		}

	}
}


문제이름 : 한수 문제번호 : 1065 [https://www.acmicpc.net/problem/1065]

  • 어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.(N<1000) 연속된 수가 들어왔을 때 등차수열이라면 N이 1000보다 작으므로 100이상의 경우 첫번째 자리와 세번째자리 수를 더한 값은 둘째자리 수의 2배가 될것이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Example3 {
	public static void main(String args[])throws IOException {
		BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
		String read = rd.readLine();
		System.out.println(oneNumber(Integer.parseInt(read)));
	}
	public static int oneNumber(int num) {
		int count = 0;
		if(num < 100) {
			return num;
		}else {
			String temp = String.valueOf(num);
			for(int i =100; i <= num; i ++) {
				temp = String.valueOf(i);
				int test1 = temp.charAt(0)-48 + temp.charAt(2) -48;
				int test2 = temp.charAt(1)-48;
				if(test1 == test2*2) {
					count++;
				}
			}
			return 99+count;
		}
	}
}