1. 문제
2 - 1. 나의 풀이
1. 점수용 배열 만들기
2. 0번째 인덱스는 채점 0번 인덱스와 같음
3. 점수가 1일 경우. i - 1 번째 점수가 1 이상이면 i 번째 점수는 +1
4. 점수가 0일 경우. 해당 점수 인덱스는 0
5. 점수 인덱스가 결정 될 때(초기화 될 때) answer에 누적합한다.
2 - 2. 나의 코드
import java.util.Arrays;
import java.util.Scanner;
public class Array07 {
public static int solution(int[] intArr, int n) {
int tmpArr[] = new int[n];
tmpArr[0] = intArr[0]; //처음은 점수 = 채점.
int answer = tmpArr[0];
for (int i = 1; i < n; i++) {
if (intArr[i] == 1) { //점수가 1일 경우
//i-1 번째가 1 이상이면 +1 해주고 아니면, 그냥 1
if(tmpArr[i-1] >=1) tmpArr[i] = tmpArr[i - 1] + 1;
else tmpArr[i] = 1;
} else{ //점수가 0 이면 채점도 0
tmpArr[i] = 0;
}
answer += tmpArr[i];
}
//System.out.println(Arrays.toString(tmpArr));
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] intArr = new int[n];
for (int i = 0; i < n; i++) {
intArr[i] = sc.nextInt();
}
System.out.println(solution(intArr, n));
}
}
3 - 1. 강의 풀이
나의 풀이보다 훨씬 간결하고 쉽게 풀었다. 오.....
1. 점수를 알려주는 count 변수, count 변수를 누적합 할 sum 변수 생성.
2. intArr[i] == 1 이면 count++ 하고 sum+=count
3. intArr[i] == 0 (else) 이면 count = 0;
3 - 2. 강의 코드
import java.util.Scanner;
public class Array07_solution {
public static int solution(int[] intArr, int n) {
int sum =0;
int count=0;
for (int i = 0; i < n; i++) {
if (intArr[i] == 1) {
count++;
sum+=count;
}else{
count=0;
}
}
return sum;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] intArr = new int[n];
for (int i = 0; i < n; i++) {
intArr[i] = sc.nextInt();
}
System.out.println(solution(intArr, n));
}
}
4. 얻어갈 점
굳이 문제에서 보여지는 대로 내가 배열을 생성할 필요 없이 더 쉬운 방법이 있다면 그대로 풀면 된다.
풀이 방식에 얽매이지 말자! 꼭!
'자바 알고리즘 문제풀이 > Array(1, 2차원 배열)' 카테고리의 다른 글
9. 격자판 최대합 (0) | 2023.09.14 |
---|---|
8. 등수 구하기 (1) | 2023.09.11 |
6. 뒤집은 소수 (0) | 2023.09.10 |
5. 소수(에라토스테네스의 체) (0) | 2023.09.02 |
4. 피보나치 수열 (1) | 2023.08.31 |