[프로그래머스] Lv1 하샤드 수 - Java
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/12947
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
제한 조건
- x는 1 이상, 10000 이하인 정수입니다.
입출력 예
x | return |
10 | true |
12 | true |
11 | false |
13 | false |
코드
x를 10으로 나눈 나머지를 check 변수에 하나씩 담는 풀이도 있지만
배열로 만들고 하나씩 check 변수에 담는 게 코드적으로 깔끔해 보여서 위 풀이처럼 풀어보았다.
조건에 따라 x의 자릿수 합(check)으로 x를 나눴을 때 나머지가 0이 되면 true 아니면 false를 반환.
(변수명을 sum으로 하는 게 이해하기 더 쉬웠을 거 같다.)
사담
프로그래머스 풀이를 보다보면 항상 좋아요를 많이 받는 건 스트림이다...
가독성이 좋은 스트림 공부도 해보고싶지만 이상하게 손이 안간다....for문에 더 애착이 간달까...?
가끔 보이는 댓글에서 스트림을 쓰면 처리하는 속도가 for문에 비해 느리다고 해서 찾아보니
for문은 단순 인덱스 기반으로 도는 메모리 접근이기 때문에 Stream에 비해 빠르고 오버헤드도 없다고 한다.
그에 반해 Stream은 JVM이 처리해줘야하는 것들이 많아서 실행이 느릴 수 밖에 없다고 한다.
성능면에선 for문이 더 빠를 순 있지만 코드의 직관화, 가독성을 생각한다면 Stream 공부는 빼놓을 수 없는 숙제라고 생각한다...
스트림으로 문제 풀이를 하는 그날까지...열심히 달려보자