항해99 온보딩 스터디[Java 언어 기초] 8일차

Hohomi·2023년 3월 15일
0
post-thumbnail

스터디 8일차 : 코딩테스트(Lv.0) 풀기


코테 풀기 2일차. 문제들은 어제보다는 조금 더 시간이 걸리는 것들이었다. 문제 자체가 막 어렵진 않은데, 아직 익숙치 않다 보니 계~속 쳐다보고 있어야 뭘 써야 할지를 알게 된다..

🍎 양꼬치

양꼬치는 1인분에 12,000원, 음료는 1개에 2,000원. 10인분 먹으면 음료수 하나 공짜! 양꼬치 n인분과 음료수 k개를 먹었다면 총 얼마를 지불해야 하는가?

class Solution {
    public int solution(int n, int k) {
        int lamp = n*12000;
        int drink = k*2000;
        if (n >= 10) {
            int count = (int)Math.floor((double)n/10);
            drink = drink - (count*2000);
        }
        int answer = lamp + drink;
        return answer;
    }
}

이 문제가 2일차에 맨처음 풀기 시작한 문제였는데 무려 50분이나 걸렸다..; 딱 봐도 복잡하게 생긴 저 count 부분을 어찌 처리해야할지 고민하다 시간이 그리 흘렀는데, 기술매니저님, 팀원분들과 같이 풀이하면서 보니 이 문제는 '몫' 개념을 쓰면 되는 거였다.

그러니까 count 안에 들어가는 친구가 바로 '몫'인 것.
예를 들어 64인분을 먹었다고 하면 10인분으로 나누었을 때의 몫인 6을 구하면 되는 거였다. 나는 그걸 '몫'이라고 접근을 바로 딱 못해서 어렵게 생각했던 거 같다. 위의 Math.floor()는 소수점을 버리는 메서드인데 저렇게 한 이유는 '아, 64인분이면 거기서 어떻게 10의 자리만 추출할 수 있지?' 하는 생각으로 흘러가게 되어서다.

그리고 한 가지 더 알게 된 건, 위 코드에서 Math.floor()메서드를 굳이 쓸 필요가 없었다는 점이다. n과 10이 int이기 때문에 count는 당연히 int로 나온다. 즉, 나머지를 뺀 몫만이 출력되는 거다. count 부분을 간단히 줄이면 이렇게 된다.

int count = n / 10;		//	64인분일 때 count는 6이 된다.

🍎 제곱수 판별하기

정수 n이 제곱수이면 1, 아니면 2를 리턴하기

class Solution {
    public int solution(int n) {
        int root = (int)Math.sqrt(n);
        if (n == root*root) return 1;
        else return 2;
    }
}

이 문제도 시간이 좀 걸렸는데, 이유는 '제곱근'과 '제곱수' 이런 것들이 헷갈려서다..
언제 보고 안 봤던가 😂
이 참에 다시금 환기하자면,
제곱수 : 어떤 자연수를 제곱했을 때 나오는 정수
제곱근 : 제곱해서 a가 되는 실수. 루트(root)!! 제곱의 반대 개념




프로그래머스 코딩테스트 입문

profile
게발로 개발하기

0개의 댓글