알고리즘 : 문자열

큰 수 A+B

시간 제한 메모리 제한
1초 256MB

 

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

출력

첫째 줄에 A+B를 출력한다.

예제 입력 1

9223372036854775807 9223372036854775808

예제 출력 1

18446744073709551615

출처


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

public class Main {
	public static void main(String[] args) throws Exception {
		Main main = new Main();
		main.start();
	}

	private void start() throws Exception {
		//System.setIn(new FileInputStream("src/test1/input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		String in = br.readLine();
		StringTokenizer st = new StringTokenizer(in, " ");
		String num1 = st.nextToken();
		String num2 = st.nextToken();
		bw.write(add(num1, num2));
		br.close();
		bw.close();
	}

	private String add(String num1, String num2) {
		//System.out.println(String.format("%s + %s", num1, num2));
		int f = 0;
		StringBuffer result = new StringBuffer();
		for (int i = num1.length() - 1, j = num2.length() - 1; i >= 0 || j >= 0; i--, j--) {
			int target1 = i < 0 ? 0 : num1.charAt(i) - '0';
			int target2 = j < 0 ? 0 : num2.charAt(j) - '0';
			int addResult = target1 + target2 + f;
			//System.out.println(String.format("%d + %d = %d", target1, target2, addResult));
			result.insert(0, addResult % 10);
			f = addResult / 10;
		}
		if(f > 0) {
			result.insert(0, f);
		}
		return result.toString();
	}
}

 

시간 메모리
152ms 15024KB

 


출처

- https://www.acmicpc.net/problem/10757

알고리즘 : 정렬

나이순 정렬

시간 제한 메모리 제한
3초 256MB

문제

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.

출력

첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.

예제 입력 1

3
21 Junkyu
21 Dohyun
20 Sunyoung

예제 출력 1

20 Sunyoung
21 Junkyu
21 Dohyun

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
	private int N;
	private List<User> users = new ArrayList<User>();
	class User implements Comparable<User>{
		private int age;
		private String name;
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		User(int age, String name) {
			this.age = age;
			this.name = name;
		}
		@Override
		public int compareTo(User o) {
            return this.age - o.getAge();
		}
		
	}
	public static void main(String[] args) throws Exception{
		Main main = new Main();
		main.start();
	}
	public void start() throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		N = Integer.parseInt(br.readLine());
		for(int i=0;i<N;i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			User user = new User(Integer.parseInt(st.nextToken()), st.nextToken());
			users.add(user);
		}
		
		Collections.sort(users);
		for(User user:users) {
			System.out.println(String.format("%d %s", user.getAge(), user.getName()));
		}
		br.close();
	}
}

출처

- https://www.acmicpc.net/problem/10814

 

알고리즘 : 기본정수론

피보나치 수

시간 제한 메모리 제한
1초 128MB

 

문제

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 n이 주어진다. n은 45보다 작거나 같은 자연수이다.

출력

첫째 줄에 n번째 피보나치 수를 출력한다.

 

예제 입력 1

10

예제 출력 1

55

 


import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    private final int MAX = 50;
	private int numbers[] = new int[MAX];
	private int N;
	public static void main(String[] args) throws Exception {
		Main main = new Main();
		main.start();
	}
	public void start() throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		numbers[0] = 0;
		numbers[1] = 1;
		System.out.println(fibonacci2(N));
	}
	private int fibonacci2(int N) {
		for(int i =2;i<=N;i++) {
			numbers[i] = numbers[i-1] + numbers[i-2];
		}
		return numbers[N];
	}
}

출처

- https://www.acmicpc.net/problem/2747

 

알고리즘 : 문자열

시간 제한 메모리 제한
2초 128MB

문제

n명의 사람중 m명을 순서에 상관없이 뽑는 경우의 수를 조합이라고 하며 nCm으로 나타낸다.

nCm은 수식으로 n!/m!(n-m)! 으로 구할 수 있다. (5! = 1 2 3 4 5)

n과 m이 주어졌을때 nCm의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 n,m (0≤m≤n≤2,000,000,000, n≠0)이 들어온다.

출력

n과 m이 주어졌을때 nCm의 끝자리 0의 개수를 출력

예제 입력 1

25 12

예제 출력 1

2

출처

  • 데이터를 추가한 사람: dcrgkev

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	
	public static void main(String[] args) throws Exception {
		Main main = new Main();
		main.main();
	}

	public void main() throws Exception {
		//System.setIn(new FileInputStream("src/test1/input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = br.readLine().trim();
		String[] sp = line.split(" ");

		int N = Integer.parseInt(sp[0]);
		int M = Integer.parseInt(sp[1]);

		int twoCnt = calculateKcountOfFatorialN(N, 2) - (calculateKcountOfFatorialN(N-M, 2)+calculateKcountOfFatorialN(M, 2));
		int fiveCnt =  calculateKcountOfFatorialN(N, 5) - (calculateKcountOfFatorialN(N-M, 5)+calculateKcountOfFatorialN(M, 5));
		
		System.out.println(calculateCountOfTen(twoCnt, fiveCnt));
		
		br.close();
	}
	private int calculateCountOfTen(int twoCnt, int fiveCnt) {
		if(twoCnt <= 0 || fiveCnt <= 0) {
			return 0;
		} else {
			return twoCnt > fiveCnt ? fiveCnt : twoCnt;
		}
	}
	private int calculateKcountOfFatorialN(int N, int K) {
		int sum = 0;
		for(long i=K;i<=N;i*=K) {
			sum+=N/i;
		}
		return sum;
	}
}

 

시간 메모리
132ms 14260KB

 


출처

- https://www.acmicpc.net/problem/2004

+ Recent posts