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 이하인 정수입니다.
발상
int로 주어진 수를 각 자리수로 새로운 숫자를 만들고 나누어 떨어지는지 확인하는 문제이다.
각 자리수로 새로운 숫자를 만든다는 점에서 문자변환을 하고 추출할까 생각했다가, 제한조건이 복잡하지 않고 숫자를 문자로 변환하고 다시 숫자로 변환하는 로직이 비효율적일 것 같아서 10으로 나누면서 자리수를 버려서 추출하였다.
의사코드
1. 10으로 나누고 나머지를 구하며 각 자리수를 추출
2. 모두 더한 뒤 결과값 검증
개선
다른 사람들의 풀이를 보니 초기 아이디어 처럼 문자로 변환하고 추출하는 로직들이 많았다.
스트림을 사용한 예도 있고, 문자열로 변환 후 split으로 잘라내서 다시 parseInt 한 케이스도 있었는데
그냥 간단하게 나머지를 활용한 풀이가 제일 빠른 것 같다.
'IT > Algorithm' 카테고리의 다른 글
[programmers] 나머지가 1이 되는 수 찾기 (0) | 2022.07.06 |
---|---|
[programmers] 평균 구하기 (0) | 2022.07.05 |
[programmers] 핸드폰 번호 가리기 (0) | 2022.07.05 |
[programmers] 행렬의 덧셈 (0) | 2022.07.05 |
[programmers] x만큼 간격이 있는 n개의 숫자 (0) | 2022.07.05 |