아니 원래 커리큘럼에 대한 문제가 5개씩 밖에 없어 적은 느낌이라
10개씩 추천해달라 했는데 어메나 기존 데이터를 싹 날려서;;
다시 추천해줬다.
그래서 새로운 마음으로 다시 시작하는 1번!
'나머지가 1이 되는 수 찾기'다.
이 문제도 역시 풀어봤던 문제다.
예전 코드를 보는데;;
정말 총체적 난국이라 생각했다.
과거 코드
class Solution {
public int solution(int n) {
boolean isEven = n % 2 == 0 ? true : false;
if(isEven) {
for(int i = 1; i < n; i+=2) {
if(n % i == 1) return i;
}
} else {
for(int i = 2; i < n; i+=2) {
if(n % i == 1) return i;
}
}
return -1;
}
}
짝수인지 홀수인지를 찾아내서 어쩌구 저쩌구 한 것 같은데....;;;;;;;;;;;;;
사실 왜 저렇게 짰는지 도저히 이해할 수 없는 코드다.
뭐 그때의 머리와 경험으로는 저게 최선이었겠지 싶다.
지금의 머리로 다시 생각해봤다.
좀 많이 고민했다. 뭔가의 규칙이 있을 거 같아 입출력 예를 보면서
다양한 방식으로 계산해봤다.
산수도 잘 못해서 종이 없으면 생각 불가~
제일 먼저 입출력의 n이 10일때를 가정해서 나온 결과 값을 봤다.
결과 값은 3인데.. 뭔가 10에 -1을하고 난 값..9...의 약수를 구하면 될 거 같은 느낌이 들었다.
그래서 12에도 적용해보기로 함.
12 -1 = 11......!! 11은 1을 제외하고 본인밖에 약수가 없,,다!
그래서 냅다 코드로 작성했다.
약수 구했었을 때 for문 조건에 Math.sqrt()을 사용했던 기억이 있어
이번에도 그렇게 사용했다.
현재 코드
class Solution {
public int solution(int n) {
n -= 1;
for(int i = 2; i <= Math.sqrt(n); i++) {
if(n % i == 0) {
return i;
}
}
return n;
}
}
코드가 많이 줄었다.
그리고 간결해진 것 같다.
근데 뭐 좋은 코드인지는 여전히 모르겠다.
다른 사람의 풀이
다른 사람의 풀이에서 1등한 풀이다.
뭔가 반복을 많이해서 시간이 좀 걸릴 것 같지만
그래도 다른 사람이 보기에 간결하고 짧고 잘 파악할 수 있다.
저번 프로젝트에서 프리 수석님이 어떨땐 복잡한 것보다 간결해서 더 좋은 것들이 있다고 하셨다.
이번이 그 예가 아닌가 싶다.
사람에게 더 친숙한 코드를 작성하는 법을 연습하자.
화이팅.