알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄
https://www.acmicpc.net/problem/2670
2670번: 연속부분최대곱
첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나
www.acmicpc.net
Think🤔
처음에 받을 숫자를 입력하고 , 그 다음 소수점 숫자들을 받는다.
숫자들 중에서 연속적인 숫자 값이 제일 크면 그 값이 답이 되고, 소수점 셋째 자리까지 출력하고 리턴하면 되는 문제.
Solution✍
package back22y03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class seqNumber {
// double을 바꿔주는 dStr
public static double dStr(String str) {
return Double.parseDouble(str);
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(bf.readLine());
double[] dArr = new double[num];
for(int i=0; i<num; i++) {
dArr[i] = dStr(bf.readLine());
}
double max = dArr[0];
for(int i=1; i<num; i++) {
dArr[i] = Math.max(dArr[i], dArr[i-1] * dArr[i]);
max = Math.max(max,dArr[i]);
}
System.out.printf("%.3f", max);
}
}
double을 바꿔주는 dStr을 만들어주고 , Double.parseDouble(str)로 리턴해준다.
두 번째 반복문은, dArr[1]에 지금 값이 크면 지금 값을 넣어주고 ,
연속된 곱이 지금 값 보다 크면 max에 그 값을 넣어준다.
dArr[i]에는 전에 연속된 값들이 만약에 더 크면 그 전 값과 곱해서 dArr[i]에 저장하고 더 큰 값을 누적해서 넣어주는 방법.
package back22y03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class seqNumber {
// double을 바꿔주는 dStr
public static double dStr(String str) {
return Double.parseDouble(str);
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(bf.readLine());
double[] dArr = new double[num];
for(int i=0; i<num; i++) {
dArr[i] = dStr(bf.readLine());
}
double max = dArr[0];
for(int i=1; i<num; i++) {
dArr[i] = Math.max(dArr[i], dArr[i-1] * dArr[i]); // 현재 위치에서 연속된 값 중 큰 값
System.out.println("dArr[i] : " + dArr[i] + " i가 : " + i + " ,max : " + max);
max = Math.max(max,dArr[i]); // 연속된 곱에서 제일 큰 값
}
System.out.printf("%.3f", max);
}
}
이해가 잘 되지 않아서, 변화 값들을 찍어보았다.
누적된 값을 dArr[i]에 넣어줌으로써, 계속 누적한값이 max보다 커지면 max에 들어가는 방식
1.638보다 큰 연속된 숫자들을 넣어서 sysout으로 찍어서 이해할 수 있었다.
Review🤩
방법이 생각나지 않아서, 참조한 부분이 있었습니다~
'Algorithm' 카테고리의 다른 글
[프로그래머스] 나머지가 1이 되는 수 찾기 , 같은 숫자는 (0) | 2022.03.09 |
---|---|
[백준] 추월 (0) | 2022.03.08 |
[백준] 설탕 배달 (0) | 2022.02.28 |
[백준] 숫자의 합 (0) | 2022.02.28 |
[인프런] 아나그램(해쉬) (0) | 2022.02.27 |