코테 준비 25일차_9/30

Jieun·2026년 9월 30일

코딩테스트 준비

목록 보기
19/24
  1. 하샤드 수
  • 초기 정답
class Solution {
    public boolean solution(int x) {
        boolean answer = true;
        int a = 0;
        for(int i = 0; i < x.length();i++) {
            a += x.substring(i);
        }
        if(x % a != 0) return false;
        return answer;
    }
}

수학 연산으로 자릿수 구하기
temp % 10 : 10으로 나눈 나머지를 구하면 마지막 자릿수를 얻을 수 있음(ex.18 -> 8)
temp /= 10 10으로 나누면 마지막 자릿수가 제거 됨(ex.18 -> 1)

  • 최종 정답
class Solution {
    public boolean solution(int x) {
        int sum = 0;
        int temp = x;
        
        while(temp > 0) {
            sum += temp % 10;
            temp /= 10;
        }
    
        return x % sum == 0;
    }
}
  1. 삼총사
    1) 3중 반복문
class Solution {
    public int solution(int[] number) {
    int answer = 0;
    int len = number.length;
    
    for(int i = 0; i < len-2; i++) {
    	for(int j = i+1; j < len-1; j++) {
        	for(int k = j + 1; k < len; k++) {
            if(number[i] + number[j] + number[k] == 0) {
            answer++;
            }
        }
       }
    }
    return answer;
    }
}

2) 재귀를 위한 조합

class Solution {
    int answer = 0;
    
    public int solution(int[] number) {
        dfs(number, 0, 0, 0);
        return answer;
    }
        
    private void dfs(int[] number, int depth, int start, int sum) {
        if (depth == 3) {
            if (sum == 0) answer++;
            return;
        }
        
        for(int i = start; i < number.length; i++) {
            dfs(number, depth+1, i +1, sum + number[i]);
        }
    }
}

3) 2중 for문 + HashMap 시간 복잡도 줄이기

import java.util.*;

class Solution {
    public int solution(int[] number) {
        int answer = 0;
        int len = number.length;
        
        for(int i = 0; i < len-2; i++) {
            Map<Integer, Integer> map = new HashMap<>();
            
        for(int j = i + 1; j < len; j++) {
            int target = -(number[i] + number[j]);
            
            if(map.containsKey(target)) {
                answer += map.get(target);
            }
            map.put(number[j], map.getOrDefault(number[j], 0) + 1);
        }
        }
        return answer;
    }
}
profile
비전공자의 백엔드 생존기: 어제보다 1% 더 성장하기

0개의 댓글