자릿수 더하기
풀이✅
import java.util.*;
public class Solution {
public int solution(int n) {
int answer = 0;
while (n > 0){
answer += n % 10;
n /= 10;
}
return answer;
}
}
이 코드로 작성하기 전에 여러 방식이 떠올랐다. int를 String으로 바꿔서 자리수를 구하고 각각의 자리들을 더하는 방식, java.lang.Math 클래스를 이용해서 푸는 방식이라던지 등...위의 풀이가 최종적으로 나온 풀이이다. 처음엔는 while true로 반복해버리고 안에 if조건으로 빠져나오게 처리했었는데, 차라리 무한루프보다는 n > 0의 조건으로 구하는 방식이 더 나았을 거 같아 변경하였다.
약수의 합
풀이✅
class Solution {
public int solution(int n) {
int answer = 0;
for (int i = 1; i <= n; i++){
answer += (n % i == 0) ? i : 0;
}
return answer;
}
}
이렇게 쉬운 문제에서도 또 얻는 것들이 있다....바로 시간 단축을 반이나 해버리는 풀이들이 있기 때문이다. int n에 1만이 들어와도 5천의 숫자만 확인해도 된다. O(n)을 O(n/2)로 단축시키는 간단하지만 똑똑한 방법.
➕시간 단축 풀이
class SolutionSolution {
public int Solution(int n) {
int answer = 0;
for(int i =1 ; i<=n/2;i++){
if(n%i==0){
answer+=i;
}
}
return answer+n;
}
}
옛날에는 아는 지식으로 무작정 풀었던 내가 이제는 어떻게 풀지는 아니까 효율적으로 돌아가는 코드에 대해 생각한다지만, 많이 배워간다(TMI: 초중 수학 학원 쌤으로 1년간 다녔는데...진짜 기초 수학만 알아도 단축시킬 수 있는 것을....).
나머지가 1이 되는 수 찾기
풀이✅
class Solution {
public int solution(int n) {
int answer = 0;
for (int i = 1; i < n; i++){
if (n % i == 1){
answer = i;
break;
}
}
return answer;
}
}
x만큼 간격이 있는 n개의 숫자
에러난 풀이❌
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
for (int i = 0; i < n; i++){
answer[i] = x * (i + 1);
}
return answer;
}
}
일부 테스트는 통과 못한 적은 처음이다. 어떠한 조건을 고려하지 않고 짰다는 뜻이다.
제한 조건
x는 -10000000 이상, 10000000 이하인 정수입니다.
n은 1000 이하인 자연수입니다.
문제의 제한 조건이 위와 같았는데, x는 1000만 개에서 -1000만까지의 범위가 걸려있는데, 값을 계속해서 증가시키면 일반적인 int의 범위를 넘어서는 것이다. 따라서 long[]을 사용했음에도 불구하고 모든 문제를 통과하지 못한 이유는, x나 n의 값이 큰 경우 결과를 long배열에 저장하기도 전에 곱셈으로 오버플로우가 발생한 것이다.
따라서 x*(i+1)를 long으로 casting하여 해결하면 된다.
올바르게 고친 풀이✅
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
for (int i = 0; i < n; i++){
answer[i] = (long) x * (i + 1);
}
return answer;
}
}
자연수 뒤집어 배열로 만들기
풀이✅:
class Solution {
public int[] solution(long n) {
String num = String.valueOf(n);
int[] answer = new int[num.length()];
for (int i = 0; i < num.length(); i++){
answer[i] = (int) (n % 10);
n /= (int) 10;
}
return answer;
}
}
answer[i] = (int) (n % 10);에서 이전에는 (int) n % 10으로 작성했던 실수🫡
문자열을 정수로 바꾸기
풀이✅
class Solution {
public int solution(String s) {
int answer = Integer.parseInt(s);
return answer;
}
}