[Java] 하샤드 수
점수 : 1120 (+1)int sum = String.valueOf(x).chars().map(ch -> ch - '0').sum(); return x % sum == 0;
테스트케이스 최대 소요시간 : 0.03ms, 79MB
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12947
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
제출답안
class Solution {
public boolean solution(int x) {
int harshad =0;
int copyX = x;
while(copyX > 0){
harshad += copyX%10;
copyX /= 10;
}
return (x%harshad==0)? true : false ;
}
}
int를 각 자리수별로 분해해서 재사용하는게 코테 1단계에서 정말 많이 쓰이는 것 같다.
괜찮은 방식을 하나 찾아서 두고두고 쓰자고 생각하고 검색해보니까 아래 블로그 글이 나왔고 제일 깔끔해서 좋았다.
문자열이 아닌 숫자에서 각자리의 숫자 뽑아오기
[4-10] int타입의 변수 num 이 있을 때, 각 자리의 합을 더한 결과를 출력하는 코드를완성하라. 만일 변수 num의 값이 12345라면, ‘1+2+3+4+5’의 결과인 15를 출력하라. (1)에 알맞은 코드를 넣으시오.[주
jepark3452.tistory.com
두고 두고 써먹어야지. 나머지연산자를 잘 활용한 예라고 생각한다.
그런데 와중에 이걸 두줄로 작성한 답안을 보니....앞으로도 갈길이 멀다는 생각이 들었다.
실무에서는 가독성때문에 이렇게 쓰진 않을 것 같지만, 알고 안쓰는 것과 모르는 건 다르니까.
int sum = String.valueOf(x).chars().map(ch -> ch - '0').sum();
return x % sum == 0;
1-1. `String.valueOf(x)` : int를 String으로 변환
1-2. `.chars()` : String을 한 글자씩의 char Stream 형태로 변환.
1-3. `map(...)` : 자바에도 맵이 있는지 처음알았다. 배열의 각 요소를 순회하며 리턴되는 값들을 모아 새로운 배열을 만든다. 이때 그냥 "0"을 int로 변환하면 48이므로 `- '0'`을 해준다.
1-4. `sum()` : 배열의 요소들을 전부 더함
2. 하긴 리턴 자체가 boolean인데 굳이 삼항연산자로 쓸 필요는 없지..
IntStream은 또 뭘까...
자바스크립트는 배우면 재밌는데 자바는 하루종일 형변환하고 타입마다 다른 메서드 찾아헤매고있으니 너무 재미없다.
#99클럽 #99일지 #코딩테스트 #개발자스터디 #항해 #TIL