백준 1024번 수열의 합
Knowledge/알고리즘2017.08.26 23:07
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; public class Main { public static void main(String[] args) { InputStream in = System.in; Reader isr = new InputStreamReader(in); BufferedReader br = new BufferedReader(isr); String[] input; int whatNumber = 0; int minlength = 0; try { input = br.readLine().split(" "); whatNumber = Integer.parseInt(input[0]); minlength = Integer.parseInt(input[1]); } catch (IOException e) { // e.printStackTrace(); } for(int i=minlength ; i <=100 ; i++) { if(getSolution(i, whatNumber)) { // log("getSolution(%d, %d)", i, whatNumber); printAnswear(i, whatNumber); break; } if(i==100) { log("-1"); } } } // n : n 개의 연속 되는 수 public static boolean getSolution(int n, int result) { // n = 1 일 때 k (단, k는 자연수 ) // n = 2 일 때 2k + 1 // n = n 일 때 nk + n(n-1)/2 // result = nk + n(n-1)/2 // result - n(n-1)/2 = nk // [result - n(n-1)/2] % n == 0 이라면 k정수가 존재 int x = result - n*(n-1)/2; if(x < 0) { return false; } boolean okay = (x % n == 0) ; return okay; } public static void printAnswear(int n, int result) { int first = (result - n*(n-1)/2) / n; String Str = ""; for(int i=0; i<n; i++) { Str += String.format("%d ", first+i); } System.out.println(Str.trim()); } public static void log(String input) { System.out.println(input); } public static void log(String input, Object ...args) { System.out.println(String.format(input, args)); } }
'Knowledge > 알고리즘' 카테고리의 다른 글
1218. [S/W 문제해결 기본] 4일차 - 괄호 짝짓기 (0) | 2017.09.30 |
---|---|
1216. [S/W 문제해결 기본] 3일차 - 회문2 (0) | 2017.09.30 |
1226. [S/W 문제해결 기본] 7일차 - 미로1 (0) | 2017.09.30 |
1208. [S/W 문제해결 기본] 1일차 - Flatten (0) | 2017.09.30 |
1206. [S/W 문제해결 기본] 1일차 - View (0) | 2017.09.30 |
백준 1024번 수열의 합 (0) | 2017.08.26 |