| 문제
머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다.
양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다.
정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면
총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해 보세요.
| 제한 사항
- 0 < n < 1,000
- n/10 ≤ k < 1,000
- 서비스로 받은 음료수는 모두 마십니다.
| 입출력 예
n | k | result |
10 | 3 | 124,000 |
64 | 6 | 768,000 |
| 힌트
알고리즘 문제를 풀다 보면 정말 다양한 상황에 놓이게 됩니다.
양꼬치 문제는 양꼬치 10개에 음료수 1개를 서비스로 준다는 것뿐만 아니라
주어진 음료수를 모두 마신다는 조건이 주어져있는데요.
댓글을 보니 "서비스로 준걸 마셨는지 돈 내고 마셨는지 어떻게 아나요?"같은 질문이 있더라고요.
이러한 질문은 좀 곤란합니다.
어렸을 때 달력을 찢은 철수에게 오늘이 무슨 요일인지 알려달라는 문제를 보신 적이 있을 거예요.
이때 "그냥 찢어진 달력을 붙이면 안 돼요?" 하는 친구들이 있었단 말이죠.
주어진 조건에 대해 2차 질문을 한다는 건 문제를 제대로 이해하지 못했다는 뜻입니다.
문제에서 주어진 상황에 온전히 몰입하셔서, 이해하려고 하지 말고 그냥 받아들이세요.
코테뿐만 아니라 개념을 학습하는데도 크게 도움이 될 겁니다.
| 풀이 1
주어진 문제를 그대로 코드로 풀어놨다고 해도 과언이 아닙니다.
양꼬치와 음료의 개수를 가지고 와서 연산을 각각 수행한 다음 더했습니다.
양꼬치를 10개 먹으면 음료수 하나가 무료이기 때문에
양꼬치 개수를 10으로 나눈 몫만큼 음료수 개수에서 차감해 주었지요.
public int solution01(int n, int k) {
int answer = 0;
int sheep = n;
int coke = k - (n/10);
answer = 12000 * sheep + 2000 * coke;
return answer;
}
| 풀이 2
풀이 1의 코드와 완전히 똑같은 코드입니다.
다만, 매개변수로 주어진 변수 외에 다른 변수는 사용하지 않았습니다.
public int solution02(int n, int k) {
return 12000 * n + 2000 * (k - (n/10));
}
| 해설
신입 개발자들은 변수를 선언할지 말지도 많이 고민을 하는 것 같아요.
풀이 2처럼 주어진 매개변수 외의 변수를 사용하지 않고도 문제를 해결할 수 있다면
변수를 사용하는 것이 맞는지, 사용하지 않는 것이 맞는지 더 헷갈릴 거고요.
그래서 두 풀이법의 소요 시간을 비교해 보았습니다.
테스트 2와 3번이 0.01ms에서 0.02ms정도의 차이가 났고 나머지는 모두 같은 시간이 걸렸습니다.
무슨 말이냐면 변수를 선언하는 것 자체는 프로그램의 성능에 크게 영향을 미치지 않는다는 거죠.
그렇기 때문에 변수를 사용할 때는 변수 선언이 시스템에 주는 영향은 생각하지 마시고,
동료 개발자들에게 미치는 영향을 생각하십시오.
만일 변수를 극소화하고도 이해할 수 있는 정도의 로직이라면 변수를 추가 선언하지 않아도 괜찮습니다.
그러나 로직이 복잡해져서 끊어서 생각할 필요가 있다면
재사용하지 않는 데이터라도 변수에 담아서 처리하면 로직을 이해하는데 큰 도움이 됩니다.
누구나 이해할 수 있고, 제일 바보 같은 코드가 제일 좋은 코드입니다.
'개발 > 개발 공부' 카테고리의 다른 글
[프로그래머스] 코딩테스트 입문 : 배열 자르기 (0) | 2024.09.12 |
---|---|
[프로그래머스] 코딩테스트 입문 : 짝수의 합 (0) | 2024.09.10 |
[프로그래머스] 코딩테스트 입문 : 각도기 (0) | 2024.09.06 |
[프로그래머스] 코딩테스트 입문 : 특정 문자 제거하기 (0) | 2024.09.05 |
[프로그래머스] 코딩테스트 입문 : 문자 반복 출력하기 (4) | 2024.09.04 |
댓글