Coding History

2024. 07. 02. 문제풀이

BlackBirdIT 2024. 7. 2. 18:44
//머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는
// 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을
// return 하도록 solution 함수를 완성해보세요.

class Solution {
    public int[] solution(int money) {
        int ice = 5500;
        int[] answer = {};
        return answer;
    }
}

우선 문제를 보면 배열에 값 두개를 넣어서 제출해야한다. 어차피 값은 두개로 종결이니까 그냥 값을 따로 도출해내서 배열 하나하나에 넣어주는게 쉬울 것 같은데 일단 해보자.

class Solution {
    public int[] solution(int money) {
        int ice = 5500;
        int count = 0;
        int[] answer = new int[2];
        for (int i = ice; ice <= money; ice+=i) {
                money -= ice;
                count++;
        }
        answer[0] = count;
        answer[1] = money;
        return answer;
    }
}

우선 이렇게 해결해서 테스트 케이스 첫번째 거는 통과 했다. 통과 못한 경우는 카운트와 money 값이 다 틀렸다. 수정이 필요하다.

class Solution {
    public int[] solution(int money) {
        int ice = 5500;
        int count = 0;
        int[] answer = new int[2];
        for (int i = 1; ice <= money; ice*=i, i++) {
                money -= ice;
                count++;
        }
        answer[0] = count;
        answer[1] = money;
        return answer;
    }
}

for 문의 조건을 약간 손 보니까 테스트케이스는 전부 통과했다. 일단 제출 해보자. 아마 가진 돈이 아이스아메리카노 값보다 적을 경우가 틀릴 것 같긴한데 일단은 구현했으니까.

역시나 실패긴한데 5개중에 3개나 틀렸네? 뭔가 더 문제가 있나? 일단 내가 아는 선에서 해결해보자.

class Solution {
    public int[] solution(int money) {
        int ice = 5500;
        int count = 0;
        int[] answer = new int[2];
        if (money < ice) {
            answer[1] = money;
            return answer;

        } else {
            for (int i = 1; ice <= money; ice *= i, i++) {
                money -= ice;
                count++;
            }
        }
        answer[0] = count;
        answer[1] = money;
        return answer;
    }
}

if문을 좀 수정해봤다. 다시 제출!

엄,, 안되네 다른 뭔가가 문제라는 것인데 뭐가 문제일까...

복잡하게 조건을 걸지 말고 나누기랑 나머지로 해결해봐야겠다.

class Solution {
    public int[] solution(int money) {
        int ice = 5500;
        int count;
        int[] answer = new int[2];
        count = money / ice;
        money = money % ice;

        answer[0] = count;
        answer[1] = money;
        return answer;
    }
}

나누기 나머지 하니까 코드가 줄었다 일단 제출

아 이렇게 간단한걸 왜 저렇게 복잡하게 생각했지 아무튼 통과.

//정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 
// 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

public class Main {
    public static void main(String[] args) {
    }
}

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = {};
        return answer;
    }
}

다음 문제. 배열 뒤집긴데 이거 언제 한번 배열 뒤집는 코드를 본적이 있었던 것 같다.

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

class Solution {
    public int[] solution(int[] num_list) {
        int i = num_list.length - 1;

        List<Integer> list = Arrays.asList(i, num_list[i]);

        Collections.reverse(list);

        Integer[] reverseArr = list.toArray(new Integer[list.size()]);



        return num_list;
    }
}

컬렉션을 사용해서 이까지는 왔는데 Integer[] 타입과 int[]타입이 부딫혀서 리턴이 안된다. 형변환이 되는지 한번 알아봐야겠다.

class Solution {
    public int[] solution(int[] num_list) {

        Integer[] b = Arrays.stream(num_list).boxed().toArray(Integer[]::new);

        List<Integer> list = Arrays.asList(b);

        Collections.reverse(list);

        Integer[] reverseArr = list.toArray(b);

        int[] a = Arrays.stream(reverseArr)
                .mapToInt(Integer::intValue)
                .toArray();

        return a;
    }
}

스트림까지 사용했다. 타입 변환 해준 후에 컬랙션을 사용해서 배열을 뒤집고 다시 타입 변환해서 리턴 값을 받았다.

근데 아마 그냥 배열 값 그대로 받아서 반복문으로 탐색해서 하나하나 뒤집는게 답이 아니였을까 싶긴한데 일단 제출해보자.

정답이다. 아무튼 오늘은 여기까지.