매일 Algorithm

신재원·2023년 5월 14일
0

Algorithm

목록 보기
121/243

프로그래머스 (조건에 맞게 수열 변환하기 2)

public class problem400 {
    class Solution {
        public int solution(int[] arr) {
            int answer = 0;
            // arr배열을 nextArr 클론 (비교해야하고, 변하기때문에)
            int[] nextArr = arr.clone();

            while (true) {
                boolean flag = true;
                answer++; // 횟수 증가

                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] > 50 && arr[i] % 2 == 0) {
                        nextArr[i] /= 2;
                    } else if (arr[i] < 50 && arr[i] % 2 != 0) {
                        nextArr[i] = nextArr[i] * 2 + 1;
                    }
                    // 바뀐 배열이랑 기존 배열이랑 같은지 비교
                    if (arr[i] != nextArr[i]) {
                        flag = false;
                    }
                }
                // 탈출 조건
                if (flag) {
                    break;
                }
                arr = nextArr.clone(); // 변경된 배열을 arr에 클론
            }
            return answer - 1;
        }
    }
}

프로그래머스 (날짜 비교하기)

public class problem401 {
    class Solution {
        public int solution(int[] date1, int[] date2) {
            for (int i = 0; i < date1.length; i++) {
                if (date1[i] < date2[i]) {
                    return 1;
                }
                // date1의 배열중에 date2보다 큰 값이 있는경우
                else if (date1[i] > date2[i]) {
                    return 0;
                }
            }
            // 배열의 값이 동일할 경우
            return 0;
        }
    }
}

프로그래머스 (문자열 묶기)

public class problem402 {
    class Solution {
        public int solution(String[] strArr) {
            int answer = 0;
            // strArr의 원소길이가 30이하임으로 배열의 갯수 할당
            int[] arr = new int[31];

            for (String str : strArr) {
                // 배열의 길이에 대한 arr 배열 증가
                arr[str.length()]++;
            }
            int max = 0;
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
                answer = max;
            }

            return answer;
        }
    }
}

프로그래머스 (2의 영역)

import java.util.ArrayList;
import java.util.List;

public class problem403 {
    class Solution {
        public int[] solution(int[] arr) {
            List<Integer> list = new ArrayList<>();

            int start = 0;
            int end = 0;
            // start 인덱스를 찾습니다.
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == 2) {
                    start = i;
                    break;
                }
            }
            // end 인덱스를 찾습니다.
            for (int i = arr.length - 1; i >= 0; i--) {
                if (arr[i] == 2) {
                    end = i + 1;
                    break;
                }
            }

            // start와 end의 값이 0일 경우 : 배열에 2가 없다.
            if (start == 0 && end == 0) {
                list.add(-1);
            }

            // start인덱스와 end 인덱스 만큼 값을 list에 담아준다.
            for (int i = start; i < end; i++) {
                list.add(arr[i]);
            }

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

            return answer;
        }
    }

}

프로그래머스 (문자 개수 세기)

public class problem404 {
    class Solution {
        public int[] solution(String my_string) {
            int[] arr = new int[52];
            for (char ch : my_string.toCharArray()) {
                if (ch >= 'A' && ch <= 'Z') {
                    arr[ch - 'A']++;
                } else if (ch >= 'a' && ch <= 'z') {
                    // a의 위치 인덱스가 26부터 시작함으로 26을 더해준다.
                    arr[ch - 'a' + 26]++;
                }
            }
            return arr;
        }
    }
}

0개의 댓글