CS 기초/알고리즘 · 문제풀이

[JAVA] Array(1, 2차원 배열) - 점수계산 / 등수구하기

sofiaaa 2022. 2. 27. 21:38

 점수계산

 

내 코드 (정답) - 하

import java.util.*;

public class Main {
    public Integer solution(int n, int[] arr){
        Integer answer = 0;

        int total = 0; // 총 점수 계산
        int count = 0; // 이전 문제 맞았는지 count

        for(int i = 0 ; i < arr.length; i++){
            if(i == 0 && arr[0] == 1){
                count = count + 1;
                total = total + 1;
            } else if(arr[i] == 1) {
                if(arr[i - 1] == 0){
                    count = count + 1;
                    total = total + 1;
                } else {
                    count = count + 1; 
                    total = total + count;
                }
            } else {
                count = 0;
            }
        }

        answer = total;

        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int[] arr = new int[n];
        for(int i = 0 ; i < n ; i++){
            arr[i] = kb.nextInt();
        }

        System.out.println(T.solution(n, arr));
    }
}

 

 

정답 코드 

단순하게 매번 cnt만 늘려주면 되는 것을 몰랐다.

import java.util.*;
class Main {	
	public int solution(int n, int[] arr){
		int answer=0, cnt=0;
		for(int i=0; i<n; i++){
			if(arr[i]==1){
				cnt++;
				answer+=cnt;
			}
			else cnt=0;
		}	
		return answer;
	}
	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		int[] arr=new int[n];
		for(int i=0; i<n; i++){
			arr[i]=kb.nextInt();
		}
		System.out.print(T.solution(n, arr));
	}
}

 

 

 

 

 등수구하기

 

내 코드 (오답) - 하

어려운 문제는 아닌데 틀렸다.

import java.util.*;

public class Main {
    public List<Integer> solution(int n, int[] arr){
        List<Integer> answer = new ArrayList<>();

        int[] tempArr = new int[arr.length];
        for(int i = 0; i < arr.length;i++){
            tempArr[i] = arr[i];
        }

        for(int i = 0 ; i < arr.length; i++){
            for(int j = 0 ; j < arr.length ; j++){
                if(arr[i] > arr[j]){
                    int temp  = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }

        for(int i = 0; i < tempArr.length; i++){
            for(int j = 0 ; j < arr.length; j ++){
                if(tempArr[i] == arr[j]){
                    answer.add(j+1);
                }
            }
        }

        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int[] arr = new int[n];
        for(int i = 0 ; i < n ; i++){
            arr[i] = kb.nextInt();
        }

        for(int i : T.solution(n, arr)){
            System.out.print(i + " ");
        }
    }
}

 

정답 코드 

이중 for문 돌면서 기준보다 큰 것이 있으면 cnt++

이렇게 단순한걸 몰랐을까.

import java.util.*;
class Main {	
	public int[] solution(int n, int[] arr){
		int[] answer = new int[n];
		for(int i=0; i<n; i++){
			int cnt=1;
			for(int j=0; j<arr.length; j++){
				if(arr[j]>arr[i]) cnt++;
			}
			answer[i]=cnt;
		}
		return answer;
	}
	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		int[] arr=new int[n];
		for(int i=0; i<n; i++){
			arr[i]=kb.nextInt();
		}
		for(int x :T.solution(n, arr)) System.out.print(x+" ");
	}
}
반응형