-
[Dev-Ping9] 백준 13305번 - 주유소 100점 답안 (Java) (서브태스크)코딩테스트/백준 2022. 1. 10. 00:30
# 문제 설명
처음 풀어본 서브 태스크 문제이다.
서브태스크 1, 2번은 로직을 짤 수 있는가에 대한 문제이다.
서브태스크 3번은 큰수의 덧셈 곱셈을 구현할 줄 아는가에 대한 문제이다.
(또 구현하기 귀찮아서 찾아보니 자바에는 라이브러리가 있었다. 왜... 직접 구현한거지 나는...)
신기한 서브테스크 채점... # 코드 구현 (58점 , 100점 두개의 코드가 있습니다)
* 항상 예외 케이스를 체크하자 (n=2 일때는 1번 코드도 0점짜리이다. 다행히 58점까지의 테스트케이스에 n=2 일때가 없는듯)
1. 로직만 구현 (58점)
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class test{ static int[] road; static int[] oilPrice; static int[] checkPoint; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringTokenizer st = new StringTokenizer(br.readLine(), " "); road= new int[n-1]; oilPrice = new int[n]; checkPoint = new int[n]; for(int i=0; i<n-1; i++){ road[i]=Integer.parseInt(st.nextToken()); } st= new StringTokenizer(br.readLine(), " "); int min = 9999; int idx =0; for(int i=0; i<n; i++){ oilPrice[i]=Integer.parseInt(st.nextToken()); if(min>oilPrice[i]){ min=oilPrice[i]; checkPoint[idx++]=i; } } checkPoint[idx]= road.length; int totalPrice = 0; for(int i=0; i<idx; i++){ for(int j=checkPoint[i]; j<checkPoint[i+1]; j++){ totalPrice+= road[j]*oilPrice[checkPoint[i]]; } } System.out.println(totalPrice); } }
2. 큰수 다루기 (100점)
import java.io.BufferedReader; import java.io.InputStreamReader; import java.math.BigInteger; import java.util.StringTokenizer; public class Main{ static BigInteger[] road; static BigInteger[] oilPrice; static int[] checkPoint; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); road= new BigInteger[n-1]; oilPrice = new BigInteger[n]; checkPoint = new int[n+1]; StringTokenizer st; if(n>2){ st = new StringTokenizer(br.readLine(), " "); for(int i=0; i<n-1; i++){ road[i]=new BigInteger(st.nextToken()); } }else{ road[0]=new BigInteger(br.readLine()); } st= new StringTokenizer(br.readLine(), " "); BigInteger min=BigInteger.valueOf(0L); int idx =0; for(int i=0; i<n; i++){ oilPrice[i]=new BigInteger(st.nextToken()); if(i==0 || min.compareTo(oilPrice[i])==1){ min=oilPrice[i]; checkPoint[idx++]=i; } } checkPoint[idx]= road.length; BigInteger totalPrice = BigInteger.valueOf(0); for(int i=0; i<idx; i++){ for(int j=checkPoint[i]; j<checkPoint[i+1]; j++){ totalPrice = totalPrice.add( road[j] .multiply( oilPrice[checkPoint[i]] ) ); } } System.out.println(totalPrice); } } /* 10 5 5 5 5 5 5 5 5 5 2 50 10 30 20 1 3 3 3 3 -> 5*(5*2) = 50 -> 5*(1*4) = 20 */ /* 2 5000000000000000000000000000000000000 5000000000000000000000000000000000000000000000000000000000000000000000 50000000000000000000000000000000000 */
728x90'코딩테스트 > 백준' 카테고리의 다른 글
[Dev-Ping9] 백준 1037번 - 약수 (0) 2022.01.10 [Dev-Ping9] 백준 5086번 - 배수와 약수 (0) 2022.01.10 [Dev-Ping9] 백준 11399번 - ATM (Java) (0) 2022.01.09 [Dev-Ping9] 백준 1541번 - 잃어버린 괄호 (Java) (0) 2022.01.09 [Dev-Ping9] 백준 11047번 - 동전 0 (Java) (0) 2022.01.05