본문 바로가기
코테

[Java] 하샤드 수

by zenna 2024. 4. 4.
728x90
int sum = String.valueOf(x).chars().map(ch -> ch - '0').sum();
return x % sum == 0;​
점수 : 1120 (+1)
테스트케이스 최대 소요시간 : 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

728x90

댓글