프로그래머스 Java - Day 25 [시뮬레이션 조건문 수학]

6720·2023년 1월 14일
post-thumbnail

[20230114]

👨‍🏫 이번 목표

프로그래머스 코딩테스트 입문 Java로 Day 25 시뮬레이션 조건문 수학 풀기

📒 문제 풀이 (Day 25 시뮬레이션 조건문 수학)

문자열 밀기

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 0 < A의 길이 = B의 길이 < 100
  • AB는 알파벳 소문자로 이루어져 있습니다.

입출력 예

ABresult
"hello""ohell"1
"apple""elppa"-1
"atat""tata"1
"abc""abc"0
class Solution {
    public int solution(String A, String B) {
        int answer = 0;
        
        String str = A;        
        for (int i = 0; i < A.length(); i++) {
            if (str.equals(B)) return answer;
            String a = str.substring(str.length()-1);
            str = a + str.substring(0, str.length() - 1);
            answer++;
        }
        
        return -1;
    }
}

참고 링크
string char 너무 어렵다

종이 자르기

머쓱이는 큰 종이를 1 x 1 크기로 자르려고 합니다. 예를 들어 2 x 2 크기의 종이를 1 x 1 크기로 자르려면 최소 가위질 세 번이 필요합니다.

https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/37cec804-18c5-4c58-95fc-37b4d52e6e7f/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-07-25%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.49.44.png

정수 MN이 매개변수로 주어질 때, M x N 크기의 종이를 최소로 가위질 해야하는 횟수를 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 0 < MN < 100
  • 종이를 겹쳐서 자를 수 없습니다.

입출력 예

MNresult
223
259
110
class Solution {
    public int solution(int M, int N) {
        int answer = 0;
        
        answer = M - 1 + (N - 1) * M;
        
        return answer;
    }
}

연속된 수의 합

연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

제한사항

  • 1 ≤ num ≤ 100
  • 0 ≤ total ≤ 1000
  • num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.

입출력 예

numtotalresult
312[3, 4, 5]
515[1, 2, 3, 4, 5]
414[2, 3, 4, 5]
55[-1, 0, 1, 2, 3]
class Solution {
    public int[] solution(int num, int total) {
        int[] answer = new int[num];
        int sum = 0;
        
        for (int i = -49; i <= 1000; i++) {
            sum = 0;
            for (int j = 0; j < num; j++) {
                answer[j] = i;
                sum += i;
                i++;
            }
            i -= num;
            if (sum == total) break;
        } 
        return answer;
    }
}

음수가 가장 많이 나오는 수는 몇일까? → num = 99 / total = 0 → result [-49 ~ 49]

result의 최솟값 = -49

그렇다면 result의 최댓값이 나올 수 있는 값은? → total의 최댓값이 1000이지만 연속된 수의 값을 더해서 나온 것이 1000이여야 하기 때문에 최댓값은 1000이라고 가정하고 갈 것임.

다음에 올 숫자

등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 2 < common의 길이 < 1,000
  • 1,000 < common의 원소 < 2,000
    • common의 원소는 모두 정수입니다.
  • 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
  • 등비수열인 경우 공비는 0이 아닌 정수입니다.

입출력 예

commonresult
[1, 2, 3, 4]5
[2, 4, 8]16
class Solution {
    public int solution(int[] common) {
        int answer = 0, count = 0, what = 0;
        
        if (common[1] - common[0] == common[2] - common[1]) answer = common[common.length-1] + common[1] - common[0];
        else answer = common[common.length-1] * (common[1] / common[0]);

        return answer;
    }
}

등차수열에 대한 조건이 맞나 안맞나 확인 후 등차 등비 구별

✨ 후기

1) 20일을 달린 결과

시작할 때는 10만명이 내 위에 있었는데 지금은 2만명 채 남지 않았다. 꾸준히 하면 앞으로 등수는 더 올라갈 것이지만 이만큼의 사람을 더 따라잡아야 한다니 한참 멀었다.
아마 내일 회의 결과를 통해서 다음에 뭐를 진행할 것인지가 나오겠지만 아마 리팩토링을 할 것 같다. 문제를 풀어가면서 아쉬웠던 점을 고쳐가는 시간을 가져야 겠다.
이렇게 리팩토링을 할 수 있다는 면에서 왜 깃허브에 코드를 올리는지 이해가 가기도 한다. (나는 벨로그랑 노션 찾아가면서 코딩해야겠네..)

2) 기록표 -완-

profile
뭐라도 하자

0개의 댓글