본문 바로가기
Algorithm/Problem_프로그래머스

알고리즘(체육복, 2016년, 가운데 글자 가져오기, 같은 숫자는 싫어)

by uyoo 2020. 4. 1.

[체육복]

 

* 로직

  • 1~n명까지 모두 한 벌씩 가지고 있다고 초기화한다
  • reserve가 가능한 학생에 대해 한 벌씩 더 추가해준다
  • lost인 학생에 대해 한 벌씩 제거해준다
    => 이를 통해 옷이 없는 인원과 여벌이 있는 학생에 대한 리스트를 구할 수 있다
  • 옷을 줄 수 있는 학생을 한 명씩 뽑아 lost 리스트에서 -1, +1 범위 내에 존재하는 학생이 존재한다면 제공을 해주고 마킹한다

 

//체육복
import java.util.Arrays;
import java.util.LinkedList;

public class Problem_GymSuit {

    public static void main(String[] args) {
        int n = 5;
        int[] lost = {2, 4};
        int[] reserve = {1,3,5};

        int answer = solution(n, lost, reserve);
        System.out.println(answer);
    }

    public static int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        boolean[] checked = new boolean[n+1];
        int[] arr = new int[n+1];

        LinkedList<Integer> list_reserve = new LinkedList<>();
        LinkedList<Integer> list_lost = new LinkedList<>();

        Arrays.fill(arr, 1);
        for(int reservePerson : reserve){
            arr[reservePerson]++;
        }

        for(int needPerson : lost){
            arr[needPerson]--;
        }

        //여벌을 줄 수 있는 학생과 그렇지 못한 학생 설정
        for(int i=1; i<=n; ++i){
            if(arr[i] >= 1) {
                if(arr[i] == 2) list_reserve.add(i);
                answer++;
            }
            else list_lost.add(i);
        }

        for(int reservePerson : list_reserve){
            for(int needPerson : list_lost){
                if(!checked[needPerson]){
                    if(reservePerson-1 == needPerson || reservePerson+1 == needPerson) {
                        checked[needPerson] = true;
                        answer++;
                        break;
                    }
                }
            }
        }

        return answer;
    }
}

 

[2016년]

 

* 로직

  • 1월 1일이 금요일이기 때문에 요일을 관리하는 배열의 1번째 인덱스가 금요일이 되게 맞춘다
    => ["THU","FRI","SAT","SUN","MON","TUE","WED"]
  • 입력된 a와 b를 통해 해당 날짜까지의 현재 일수로 변환한다
  • 변환된 일수 % 7의 인덱스값을 출력한다

 

//2016년
public class Problem_2016 {

    public static void main(String[] args) {
        int a = 5;
        int b = 24;
        String answer = solution(a, b);

        System.out.println(answer);
    }

    public static String solution(int a, int b) {
        String answer;

        //1월1일이 금요일이라면 => index 1이 금요일이 되게끔 설정
        String[] days = {"THU","FRI","SAT","SUN","MON","TUE","WED"};

        //일로 변환해 나머지 연산 실행
        int totalDay = 0;
        for(int i=1; i<a; i++) { // @1
            if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8  || i == 10 || i == 12) totalDay += 31;
            else if(i == 2) totalDay += 29;
            else totalDay += 30;
        }

        totalDay += b;

        answer = days[totalDay % 7];
        return answer;
    }
}

 

[가운데 글자 가져오기]

 

* 로직

  • 입력된 s의 개수가 짝수라면
    • index = 개수 / 2를 받은 뒤, 이전 글자와 구해진 index의 글자를 출력한다
  • 홀수라면
    • index = 개수 / 2를 받은 뒤, 해당 글자만 출력한다
//가운데 글자 가져오기
public class Problem_CenterWord {

    public static void main(String[] args) {
        String s = "abcde";
        String answer = solution(s);
        System.out.println(answer);
    }

    public static String solution(String s) {
        String answer = "";
        int idx=0;
        if(s.length() % 2 == 0){
            idx = s.length() / 2;
            answer = s.substring(idx-1, idx);
            answer += s.substring(idx, idx+1);
        }

        else {
            idx = s.length() / 2;
            answer = s.substring(idx, idx+1);
        }

        return answer;
    }
}

 

[같은 숫자는 싫어]

 

* 로직

  • 숫자는 0~9까지이기 때문에 초기 비교할 base 값을 -1로 설정한다
  • 입력이 들어온 배열 개수만큼 하나씩 비교한다
    • 만약 base 값과 다르다면 list에 담고, base를 갱신한다

 

//같은 숫자는 싫어
import java.util.ArrayList;

public class Problem_NoSameNumber {

    public static void main(String[] args) {
        int[] arr = {1,1,3,3,0,1,1};
        int[] answer = solution(arr);

        for(int ans : answer){
            System.out.print(ans + " ");
        }
    }

    public static int[] solution(int[] arr) {
        int[] answer;
        ArrayList<Integer> results = new ArrayList<>();

        int base = -1;
        for(int i=0; i<arr.length; ++i){
            if(base != arr[i]) {
                results.add(arr[i]);
                base = arr[i];
            }
        }

        answer = new int[results.size()];
        for(int i=0; i<results.size(); ++i){
            answer[i] = results.get(i);
        }

        return answer;
    }
}