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;
}
}
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;
}
}