[백준/자바/JAVA] 2914 : 저작권

Seongkeun·2021년 7월 30일
3

BOJ

목록 보기
1/12
post-thumbnail
post-custom-banner

https://solved.ac/problems/level
(백준 문제 등급화 해놓은 사이트)
브론즈V 에 등록 된 문제이다
사실 이 문제...풀지 못했다...충격...
다른 사람들이 풀이 올려놓은 것 보고도 사실 바로 이해하지 못했다..충격2... 하지만 나름 머리를 계속 쓰다보니 어느 순간 수긍하게 되었다.


백준 2914번 - 저작권

[문제]

창영이는 노래 여러 개를 이어서 부르는 가수이다. 유명한 노래의 비슷한 멜로디를 이어서 부르면서 언제 곡이 넘어갔는지 모르게 만드는 것이 창영이 노래의 특징이다. 이런 노래로 상업적으로 엄청난 성공을 거둔 창영이에게 큰 시련이 찾아왔다. 그것은 바로 저작권이었다.

창영이의 노래에 포함되어 있는 멜로디는 모두 저작권이 다른 사람에게 있는 노래이다. 따라서, 이 음악으로 상업적인 활동을 했기 때문에, 저작권 협회에 저작권료를 내야한다.

창영이는 자신의 앨범에 포함되어있는 저작권이 있는 멜로디의 평균값을 구해보기로 했다. 이 값은 아래와 같이 구할 수 있다.

(창영이 앨범에 수록된 곡에 포함되어 있는 저작권이 있는 멜로디의 개수) / (앨범에 수록된 곡의 개수)

이때, 평균값은 항상 올림을 해서 정수로 만들어야 한다. 예를 들어, 창영이의 1집 앨범 "영창에서 영원히 영창피아노를 친다"에 총 38개 곡이 수록되어 있고, 이 앨범에 저작권이 있는 멜로디가 894개가 있다면, 평균값은 23.53이 되고 올림해서 24가 된다.

매니저 강산이는 얼마나 많은 사람에게 저작권료를 주어야 하는지 궁금해졌다. 강산이가 알고 있는 정보는 앨범에 수록되어 있는 곡의 개수와 위에서 구한 평균값이다. 이때, 적어도 몇 곡이 저작권이 있는 멜로디인지 구하는 프로그램을 작성하시오.

{입 출력 예제}


[문제풀이]

방법 1 )

제일 중요한 포인트는 마지막 줄의 "적어도" 에 있다.

M : 저작권이 있는 멜로디의 개수
A : 앨범에 수록된 곡의 개수
I : 올림한 평균 값


저작권이있는멜로디의개수앨범에수록된곡의개수=올림한평균값\cfrac{저작권이 있는 멜로디의 개수}{앨범에 수록된 곡의 개수} = 올림한 평균 값


기호 표기 :       MA=I\left\lceil\cfrac{M}{A}\right\rceil=I


{문제에서 물어보는 답은 M의 최솟 값 찾기}

우리는 IIAA 를 입력 받아서 MM 의 최솟 값을 구해야 한다.

M=I×AM = I \times A 이다. 하지만 여기서 II = 올림한 수 이다

입력 값 II2424 일 때,   23<I2423<I \leq24 라는 소리다.

I=24I = 24 로 입력 값이 들어오면 MM의 최솟 값을 찾아야 하기에 II의 최소 치를 입력해 줘야 한다

{예제}

I=24I = 24 가 있다. 이건 올림한 수 이니까 최솟 값을 찾기 위해 소수 점이 있는 아무 소수로 가정...

I=23.01I = 23.01 이라 하고 A=38A = 38 이라 했을 때,

M=874.38M = 874.38 이 나온다. 하지만 멜로디의 개수는 소수점 일 수 없다. 즉, MM 도 올림 하여야 한다. ( MM 은 정수이어야 한다 )


즉,
M=A×(I1)+1M = A \times (I-1) + 1


방법 2 )

입력 값 : AA, II
출력 값 : MM
(AA, II, MM 은 정수)

I1<MAII -1 < \cfrac{M}{A} \leq I

A(I1)<MAIA(I - 1) < M \leq AI

여기서 A(I1)A(I - 1) 이 정수이므로 정수 MM 의 최솟 값

A(I1)+1A(I -1) + 1



[코드작성]

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
	private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
		StringTokenizer st = new StringTokenizer(br.readLine());
		int A = Integer.parseInt(st.nextToken());
		int I = Integer.parseInt(st.nextToken());
		bw.write(String.valueOf(A*(I-1)+1));
		bw.flush();
		bw.close();
	}
}

profile
지혜는 지식에서 비롯된다
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 10월 15일

정답은 알겠는데 왜인지 이해가 잘 안되는 문제였는데 이제 이해가 확실히 되네요 감사합니다!!

답글 달기