-
[백준/BOJ] 10539번 : 수빈이와 수열 (JAVA / 자바)백준 2022. 2. 9. 19:40
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/10539
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
문제에서 제시된 것은 A > B 수열로 변환하는 방법이다. 우리가 입력할 값은 B수열이고 이걸 A 수열로 바꿔야한다.
예제로 확인해보자. 값 B수열 (3 2 3 5) A수열로 바꿧을때 (3 1 5 11)이 나온다.
원래 A > B는 3 / 1 = 3, (3 + 1) / 2 = 2 이렇게 나온다. 이걸 반대로 돌려보자. (3 + 1) / 2 = 2에서 주어진 값은 2하고 맨 처음수는 그대로 넘어가기 때문에 3을 알 수있다. 그럼 알수 없는 값을 n으로 넣으면 (3 + n) / 2 = 2 인것이다. 역산을 하자. n = (2 * 2) + 3 이다.
B 값이 (A, B, C, D)이고, A값이 (a, b, c, d)이면 a = A; b = (B * 2) - a; c = (C * 3) - (a + b); d = (D * 4) - (a + b + c)이다.
이것을 토대로 코드를 짜보자.
-풀이-
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)); int N = Integer.parseInt(br.readLine()); //A 수열을 저장 할 배열 int[] arr = new int[N]; //현재 값 이전 수열 값들의 합을 저장할 변수 int sum = 0; StringTokenizer st = new StringTokenizer(br.readLine()); for(int i = 0; i < N; i++) { int M = Integer.parseInt(st.nextToken()); //첫 값은 그대로 받아온다. if(i == 0) { arr[0] = M; //두번째 값부터는 연산 식을 적용해 가져온다. }else { arr[i] = (M * (i + 1)) - sum; } //값이 구해지면 변수에 더한다. sum += arr[i]; } //배열에 저장된 값을 {}없이 출력하기 위해 for문 사용 for(int K : arr) { System.out.print(K + " "); } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 10599번 : 페르시아의 왕들 (JAVA / 자바) (0) 2022.02.09 [백준/BOJ] 10569번 : 다면체 (JAVA / 자바) (0) 2022.02.09 [백준/BOJ] 10474번 : 분수좋아해? (JAVA / 자바) (0) 2022.02.09 [백준/BOJ] 10419번 : 지각 (JAVA / 자바) (0) 2022.02.09 [백준/BOJ] 10409번 : 서버 (JAVA / 자바) (0) 2022.02.09