-
[백준/BOJ] 1049번 : 기타줄 (JAVA / 자바)백준 2022. 2. 24. 18:09
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1049
1049번: 기타줄
첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주
www.acmicpc.net
- 문제 -
난이도 실버 4 문제이다.


자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
(JAVA / 자바) Scanner 와 Bufferedreader
안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자
comain.tistory.com
풀이 방법
제일 싼 값을 하려면 한 세트당 가격중 최솟값과 개별 가격중 최솟값을 구해준다.
그리고 두 최솟값으로 구할 수 있는 기타줄 가격은 세가지 있다.
세트만으로 구성된 가격, 세트와 개별로 구성된 가격, 개별로만 구성된 가격이다.
예를 들어보자 예제 2번. 끊어진 기타줄 10개.
세트 2개로 12개 사는 방법, 세트 1개와 낱개 4개로 10개 사는 방법, 낱개 10개 사는 방법이 있는 거다.
세트 최솟값은 20, 낱개 최솟값은 4이다.
세트 2개 사면 20 * 2 = 40, 세트 + 낱개는 20 + (4*4) = 36, 낱개만 4 * 10 = 40이다.
이중 최솟값은 36이기때문에 36을 출력하면 된다.
코드로 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); //세트, 낱개 최솟값을 저장 할 변수이다. 올 수 있는 최댓값을 우선 저장해줘야하는데 //조건에서 말한 최댓값은 1000이기때문에 1000 저장. int set = 1000; int single = 1000; //입력값을 받으면서 최솟값을 변수에 저장 for(int i = 0; i < M; i++) { st = new StringTokenizer(br.readLine()); set = Math.min(set, Integer.parseInt(st.nextToken())); single = Math.min(single, Integer.parseInt(st.nextToken())); } //가격을 정할 3개지 방법을 저장 할 3개의 변수 int A, B, C; //끊어진 기타줄의 개수가 6의 배수이면 몫을 곱해주면 되지만, //6의 배수가 아니면 몫에 +1을 해서 곱해준다.(세트로만 사는 경우에만 해당) if(N % 6 == 0) { A = set * (N / 6); }else { A = set * ((N / 6) + 1); } B = (set * (N / 6)) + (single * (N % 6)); C = single * N; //세가지의 값중 최솟값을 저장 int result = Math.min(A, Math.min(B, C)); System.out.println(result); } }
-결과-

아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 10953번 : A+B - 6 (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 2702번 : 초6 수학(JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 1026번 : 보물 (JAVA / 자바) (1) 2022.02.24 [백준/BOJ] 1546번 : 평균 (JAVA / 자바) (0) 2022.02.23 [백준/BOJ] 11320번 : 삼각 무늬 - 1 (JAVA / 자바) (0) 2022.02.23