ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • stack
  • git bash
  • dfs
  • React
  • 안드로이드
  • compareTo()
  • 스택/큐
  • reactjs
  • 백준
  • PriorityQueue
  • Comparator
  • 코틀린
  • 프로그래머스
  • 깃
  • 프로그래머스 Lv.2
  • Android
  • BFS
  • entrySet
  • getOrDefault
  • sort
  • git
  • HashMap
  • 해시
  • 깃허브
  • java
  • greedy
  • DP
  • Arrays.sort()
  • kotiln
  • Queue

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

[JAVA] 백준 3036번 : 링
Algorithm & Data Structure/백준

[JAVA] 백준 3036번 : 링

2020. 5. 17. 03:35

 

 

3036번: 링

문제 상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다.  상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌�

www.acmicpc.net

문제

 

- 여러개의 링이 있고 그 링들의 반지름이 주어졌을때, 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 돌아가는지 구하는 프로그램

 

입력

- 첫째 줄에 링의 개수 N (3 ≤ N ≤ 100)

- 다음 줄에는 링의 반지름 (반지름은 1과 1000를 포함하는 사이의 자연수)

 

출력

- 출력은 총 N-1줄을 해야 한다.

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

 

풀이

원의 둘레 공식은 (원의 반지름)*2*π(파이) 다.

첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 출력해야하기 때문에

 

(첫번째 링의 둘레) / (두번째 링의 둘레)

(첫번째 링의 둘레) / (세번째 링의 둘레)

(첫번째 링의 둘레) / (세번째 링의 둘레)

 

같이 나오게 된다. 이때,  출력이 기약 분수 형태로 출력해야하는데 이는 분자와 분모를 각각 최소공약수로 나눠주면 쉽게 해결가능하다.

 

최소공약수를 구하는 알고리즘과 코드는 이전 포스팅의 풀이를 참고하면 좋다.

 

[JAVA] 3036번 : 최대공약수와 최소공배수

2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 문제 두 개의 자연수를 입력받

hu-coding.tistory.com

 

gcd() 메소드를 사용할 때 주의점은 a를 b로 나눠주기 때문에 a>b라는 조건을 내포하고 있다는 점이다.

따라서 gcd 메소드에 매개변수를 줄 때, max, min함수를 이용해 더 큰 값을 첫번째 인자로, 작은 값은 두번째 인자로 줘야한다. 

public class bj3036 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner s = new Scanner(System.in);
		
		int n = s.nextInt(); // 링의 개수 n개
		
		int r[] = new int[n+1]; // 링의 반지름
		for(int i=1;i<=n;i++)
			r[i]=s.nextInt();
		
		for(int i=2;i<=n;i++) {
			int gcd = gcd(Math.max(r[1], r[i]),Math.min(r[1], r[i]));
			System.out.print(r[1]/gcd); //분자
			System.out.print("/"); // 분수 막대
			System.out.println(r[i]/gcd); //분모
			
		}
	}
	// 최대 공약수 구하는 함수
	public static int gcd(int a, int b) {
		while(b!=0) {
			int r = a%b;
			a=b;
			b=r;
		}
		return a;
	}


}

'Algorithm & Data Structure > 백준' 카테고리의 다른 글

[JAVA] 백준 1026번 : 보물  (0) 2020.05.22
[JAVA] 백준 1890번 : 점프  (0) 2020.05.22
[JAVA] 백준 2609번 : 최대공약수와 최소공배수  (0) 2020.05.17
[JAVA] 백준 14501번 : 퇴사  (0) 2020.05.16
[JAVA] 백준 1932번 : 정수 삼각형  (0) 2020.05.15
    'Algorithm & Data Structure/백준' 카테고리의 다른 글
    • [JAVA] 백준 1026번 : 보물
    • [JAVA] 백준 1890번 : 점프
    • [JAVA] 백준 2609번 : 최대공약수와 최소공배수
    • [JAVA] 백준 14501번 : 퇴사
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바