
프로그래머스 코딩테스트 연습 기능이 있어 간혹 한 문제씩 풀어보는 편인데
이 코드와 리뷰를 기록하는 이유는 저도 다른 분들의 코드를 보며 다른 방식도 있구나 하며 느끼는 것이
실력 향상에 도움이 되겠다 라고 생각하기 때문입니다 ㅎㅎ
"코드 라인이 짧아야 무조건 좋다 멋지다 최고다" 처음엔 이와 같이 생각했지만 지금은 아니라고 생각합니다
각설하고 문제는 아래와 같습니다
입출력 되어야하는 예시
저는 지문과 입출력 예를 여러 번 보는 편입니다 어차피 우리가 코드로 짤 내용은
이미 지문에 다 담겨있기 때문이고 제한사항은 잘 보지 않는 편이었는데 이번에 다시 한번 느낀 바가 있습니다
입출력의 내용은 이렇습니다
price 놀이기구 이용하는데에 필요한 비용
money 소지하고 있는 돈
count 탑승횟수
result 필요한 금액 이거나 0
지문을 요약하자면 놀이기구를 최초 1회에 탑승할 때는 price의 금액만 내면 되지만 한번 더 타려면 price의 2배가 되는
금액 즉 6원을 내야 탑승할 수 있고 3번째 탑승하려면 3배가 되는 금액 9원을 내야 합니다
이러한 규칙을 갖고 있을 때 내가 만약 4번을 탑승하고 싶다고 생각하면 내가 얼마가 있어야 탈 수 있지?
또는 내가 얼마가 부족하지?라는 것을 알아야 내가 원하는 4번의 탑승이 가능하겠죠
이것을 식으로 풀어보면
3 + 6 + 9 + 12 =30
4번 탔을 때 내가 갖고 있어야 하는 금액은 30 인 것입니다
그럼 이 금액에서 내가 갖고 있는 돈을 제하면 필요한 금액이 나오겠죠?
이것을 코드로 짜보도록 합시다
저는 코테 볼 때 규칙성을 먼저 살핍니다 이 문제는 굉장히 쉬운 문제이기도 하지만 규칙성이 보이죠
1회 3 2회 6 3회 9 4회 12
3*1 3*2 3*3 3*4
price 곱하기 횟수를 하면 되는구나 라는 생각이 들었습니다
그래서 이와 같이 코드를 작성했습니다
long answer = -1;
long resultPrice = 0;
for (int i = 1; i <= count; i++){
resultPrice += price * i;
}
return 할 answer는 그대로 두고
내가 필요한 금액의 총합계를 담아줄 resultPrice 변수를 생성하고 (굳이 안 하고 answer에 넣어도 되긴 합니다)
for 문을 보면 변수가 1부터 시작하여 count개수까지 실행하게 됩니다 0부터 아니라 1부터인 이유는
price 곱하기 0번의 카운트는 없기 때문에 ㅎㅎ 1부터 시작했고 4번째 까지 실행하며 그 금액을 더해주면
여러 번 타고 싶은 놀이기구의 총금액을 알아낼 수 있기 때문입니다
필요한 금액을 알아냈으니 이제 다음지문을 보면 얼마나 모자라는지 return 하고 모자라지 않으면 0을 return 하라고
되어있죠
3항 연산자로 마무리해보도록 합시다
answer = resultPrice > money ? resultPrice - money : 0;
내 돈보다 resultPrice가 크다면 당연히 돈이 부족한 것이므로 얼마가 부족한지 연산해서 return 하고
아니라면 0을 리턴해주면 끝입니다
그리고 이 문제는 쉬워서 금방 풀어냈는데 채점을 하니 실패가 뜨더라고요
뭐가 문제인지 체크해 보니
제한사항에 money는 10억의 자연수를 저장할 수 있는 변수더라고요 근데 제가 int형으로 썼거든요
int자료형이 가질 수 있는 최대수를 간과했던 제 자신이었습니다 다시 한번 되짚으면서 long타입으로 변경해 주니
정상적으로 통과되었습니다
통과 후 다른 분들 코드를 보니 한 줄에 끝내시더라고요 ㅋㅋㅋ 대단하십니다
간간히 코딩테스트 문제를 업로드할 계획이니 여러 사람의 코드를 보며 다양성을 키워보도록 합시다
감사합니다
'Developer > Java' 카테고리의 다른 글
[java]프로그래머스-포캣몬 (0) | 2023.05.24 |
---|---|
[java]프로그래머스-삼각형의 완성조건 (1) (0) | 2023.05.24 |
[java]함수형 인터페이스 (0) | 2023.01.04 |
[java]람다식 (0) | 2022.12.07 |
[java]스레드2(Thread) (0) | 2022.12.06 |