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

[JAVA] Array(1, 2차원 배열) - 큰 수 출력하기 / 보이는 학생 / 가위 바위 보

sofiaaa 2022. 2. 26. 22:51

 큰 수 출력하기

 

내 코드 (정답) - 하

이렇게 푸는지 모르겠어서 정답을 어서 봐야겠다.

비효율적인 것 같다.

 

Time: 164ms Memory: 27MB

import java.util.*;

public class Main {
    public String solution(int n, List<Integer> list){
        String answer = "";

        for(int j = 0; j < list.size(); j++){
            if(j == 0){
                answer += list.get(0);
                answer += ' ';
            } else {
                if(list.get(j) > list.get(j - 1)){
                    answer += list.get(j);
                    answer += ' ';
                }
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        List<Integer> list = new ArrayList<>();
        for(int i =0; i < n; i++){
            int x = kb.nextInt();
            list.add(x);
        }
        System.out.println(T.solution(n ,list));
    }
}

 

정답 코드

for 문으로 출력을 받아오면 되는데 비효율적으로 공백을 만들어서 리턴했다.

import java.util.*;
class Main {	
	public ArrayList<Integer> solution(int n, int[] arr){
		ArrayList<Integer> answer = new ArrayList<>();
		answer.add(arr[0]);
		for(int i=1; i<n; i++){
			if(arr[i]>arr[i-1]) answer.add(arr[i]);
		}
		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+" ");
		}
	}
}

 

 

 보이는 학생 

 

내 코드(정답 - 시간 초과)

답은 맞았지만 시간 초과이기 때문에 오답이다.

import java.util.*;

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

        for(int i = 0; i < arr.length; i++){
            if(i == 0) {
                answer = answer + 1;
            } else {
                boolean is_big = false;
                for(int j = 0 ; j < i ; j++){
                    if(arr[j] >= arr[i]){
                       is_big = true;
                    }
                }
                if(!is_big){
                    answer = answer + 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();
        }

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

 

정답 코드

 

이중 for문이므로,  시간복잡도는 O(n제곱)  이다.

따라서 이중 for문을 사용하지 않고,

max 를 130으로 잡고 max 보다 클 때 계산하는 방식으로 한다.

 

import java.util.*;

public class Main {
    public int solution(int n, int[] arr){
        int answer = 1, max = arr[0];
        
        for(int i = 0; i < n ; i++){
         if(arr[i] > max){
             answer ++ ;
             max = arr[i];
         }
        }

        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));
    }
}

 

 가위 바위 보

 

내 코드 (정답) - 하

println -> 다음 줄

print -> 같은 줄

 

어디선가 풀어본 기억이 있다.

이렇게 푸는게 맞나?

Time: 170ms Memory: 27MB

import java.util.*;

public class Main {
    public String solution(int n, int arr1, int arr2){
        String answer = "";

        // 1 - 가위 2- 바위 3 - 보
        int temp = arr1 - arr2;
        if(temp == 0){
            answer = "D";
        } else if(temp == -1 || temp == 2){
            answer = "B" ;
        } else if(temp == 1 || temp == -2){
            answer = "A";
        }

        return answer;
    }

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

        int[] arr2 = new int[n];
        for(int i =0; i < n; i++){
            arr2[i] = kb.nextInt();
        }

        for(int x = 0; x < n ; x++){
            System.out.println(T.solution(n, arr1[x], arr2[x]));
        }}
}

 

 

정답 코드

 

A가 이겼을 때 , 비겼을 때 빼고는 나머지는 다 B가 이긴거니까 ..

아...

import java.util.*;
class Main {	
	public String solution(int n, int[] a, int[] b){
		String answer="";
		for(int i=0; i<n; i++){
			if(a[i]==b[i]) answer+="D";
			else if(a[i]==1 && b[i]==3) answer+="A";
			else if(a[i]==2 && b[i]==1) answer+="A";
			else if(a[i]==3 && b[i]==2) answer+="A";
			else answer+="B";
		}
		return answer;
	}
	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		int[] a=new int[n];
		int[] b=new int[n];
		for(int i=0; i<n; i++){
			a[i]=kb.nextInt();
		}
		for(int i=0; i<n; i++){
			b[i]=kb.nextInt();
		}
		for(char x : T.solution(n, a, b).toCharArray()) System.out.println(x);
	}
}
반응형