본문 바로가기
Algorithm/완전탐색

[프로그래머스] 코딩테스트 고득점 Kit - 완전탐색 (JAVA)

by 루시킴 2021. 10. 1.

https://programmers.co.kr/learn/courses/30/parts/12230

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

List<자료형> list = new ArrayList<>() : List선언

list.size() : 리스트의 길이

Collections.sort(list) : 리스트 정렬

list.get(인덱스) : 해당 인덱스에 있는 리스트의 값 반환

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        List<Integer> l = new ArrayList<Integer>();
        int[] one ={1,2,3,4,5};
        int[] two={2,1,2,3,2,4,2,5};
        int[]three={3,3,1,1,2,2,4,4,5,5};
        int result[]=new int[3];
        for(int i=0; i<answers.length; i++){
            if(answers[i]==one[i%5]) result[0]++;
            if(answers[i]==two[i%8]) result[1]++;
            if(answers[i]==three[i%10]) result[2]++;
        }
        int max=0;
        for(int i=0; i<result.length; i++){
            if(max<result[i]) max=result[i];
        }
        for(int i=0; i<result.length; i++){
            if(result[i]==max) l.add(i+1);
        }
        Collections.sort(l);
        int[] answer = new int[l.size()];
        for(int i=0; i<l.size(); i++){
            answer[i]=l.get(i);
        }
        return answer;
    }
}

https://programmers.co.kr/learn/courses/30/lessons/42839

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr

(int)Math.sqrt(숫자) : 해당 숫자의 제곱근 후 정수로 형변환

Integer.parseInt(tmp) : String을 int형으로 변환

list.contains(item) : item이 리스트에 포함되어있으면 True 없으면 False

list.add(element) : list에 element 추가

String n -> n.length() : String n의 길이

string.charAt(index) : String의 특정 인덱스 값

string.substring(start,end) : 특정문자열의 start인덱스부터 end전까지 부분문자열

import java.util.*;

class Solution {
    int result=0;
    List<Integer> l = new ArrayList<>();
    public boolean is_prime(int n){
        if(n==0 || n==1) return false;
        for(int i=2; i<=(int)Math.sqrt(n);i++){
            if(n%i==0) return false;
        }
        return true;
    }
    public void dfs(String numbers, boolean[] visited, 
                    String tmp, int len, int depth){
        if(len==depth){
            int n=Integer.parseInt(tmp);
            if(!l.contains(n)){
                l.add(n);
                if(is_prime(n)) result++;
            }
            return;
        }
        for(int i=0; i<numbers.length(); i++){
            if(!visited[i]){
                visited[i]=true;
                tmp+=numbers.charAt(i);
                dfs(numbers,visited,tmp,len,depth+1);
                tmp=tmp.substring(0,tmp.length()-1);
                visited[i]=false;
            }
        }
        
    }
    public int solution(String numbers) {
        int answer = 0;
        boolean[] visited = new boolean[numbers.length()];
        for(int i=0; i<numbers.length(); i++){
            dfs(numbers, visited, "",i+1,0);
        }
        answer=result;
        return answer;
    }
}

https://programmers.co.kr/learn/courses/30/lessons/42842

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int N,M;
        for(int i=1; i<=yellow; i++){
            if(yellow%i!=0) continue;
            N=i;
            M=yellow/i;
            if(brown==2*(M+N+2)){
                answer[0]=M+2;
                answer[1]=N+2;
                break;
            }
        }
        return answer;
    }
}

댓글