개발자일걸요..?

3036번 링 본문

알고리즘코딩/Baekjoon Online Judge

3036번 링

Re_A 2021. 2. 14. 21:16
728x90
반응형

문제링크 : www.acmicpc.net/problem/3036

 

3036번: 링

출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.

www.acmicpc.net

 

문제 풀이 근거

  링을 한 줄로 곧게 편다면 반지름이 12인 원은 반지름이 4인 원에 비해 3배 더 길다.

   따라서, 반지름이 12이인 원이 도는 시간이 n이라면 반지름이 4인 원이 도는 시간은 n/3이다.

 

<알고리즘>

  1) 첫번째 수와 i번째 수의 최대공약수를 구한다.

  2) 첫번째 수와 i번째 수를 각각 최대공약수로 나눈다. 

   

 

 

코드 1. Scanner를 이용한 코드(메모리 : 12972KB   시간 : 124ms)

import java.util.Scanner;

public class Main {

	public static int gcd(int a, int b) {
		while(b!=0) {
			int n = a%b;
			a = b;
			b = n;
		}
		return a;
	}
    
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		int numbers[] = new int[T];
		for(int i =0;i<T;i++) {
			numbers[i] = sc.nextInt();
		}
        
		for(int i =1;i<T;i++) {
			int maximum = gcd(numbers[0], numbers[i]);
			System.out.println((int)(numbers[0]/maximum)+"/"+(int)(numbers[i]/maximum));
			
		}
	}
}

 

 

코드 2. BufferedReader를 이용한 코드(메모리 : 11612KB   시간 : 88ms)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {
	public static int gcd(int a, int b) {
		while(b!=0) {
			int n = a%b;
			a = b;
			b = n;
		}
		return a;
	}
	public static void main(String[] args) {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String s ="";
		try {
			s = bf.readLine();
		} catch(IOException e) {}
		StringTokenizer st = new StringTokenizer(s);
		int T = Integer.parseInt(st.nextToken());
		try {
			s = bf.readLine();
		}catch(IOException e) {}
        
		StringTokenizer sn = new StringTokenizer(s);
		int numbers[] = new int[T];
		for(int i =0;i<T;i++) {
			numbers[i] = Integer.parseInt(sn.nextToken());
		}
        
		for(int i =1;i<T;i++) {
			int maximum = gcd(numbers[0], numbers[i]);
			System.out.println((int)(numbers[0]/maximum)+"/"+(int)(numbers[i]/maximum));
			
		}
	}
}

 

 

코드 3. BufferedReader와 StringBuilder(출력최소화) 이용한 코드(메모리 : 11584KB   시간 : 80ms)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {
	public static int gcd(int a, int b) {
		while(b!=0) {
			int n = a%b;
			a = b;
			b = n;
		}
		return a;
	}
	public static void main(String[] args) {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String s ="";
		try {
			s = bf.readLine();
		} catch(IOException e) {}
		StringTokenizer st = new StringTokenizer(s);
		int T = Integer.parseInt(st.nextToken());
		try {
			s = bf.readLine();
		}catch(IOException e) {}
        
		StringTokenizer sn = new StringTokenizer(s);
		int numbers[] = new int[T];
		for(int i =0;i<T;i++) {
			numbers[i] = Integer.parseInt(sn.nextToken());
		}
        
		StringBuilder answer = new StringBuilder();
		for(int i =1;i<T;i++) {
			int maximum = gcd(numbers[0], numbers[i]);
			answer.append((int)(numbers[0]/maximum));
			answer.append("/");
			answer.append((int)(numbers[i]/maximum));
			answer.append("\n");
		}
		System.out.println(answer);
	}
}
반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

11051번 이항계수2  (0) 2021.02.14
11050번 이항계수1  (0) 2021.02.14
1037번 약수  (0) 2021.02.13
2981번 검문  (0) 2021.02.13
1934번 최소공배수  (0) 2021.02.13
Comments