728x90


class Solution {
public int solution(int n) {
int answer = 0;
for (int i = 1; i <= n; i++) {
// i가 1부터 n까지 반복.
if (n % i == 0) {
// n이 i로 나눈 나머지 값이 0 이면 순서쌍이기에 적합하면 순서쌍의 개수(answer) 증가.
answer++;
}
}
return answer;
}
}
* 순서쌍의 개수 라는 문제.
* 막상 순서쌍의 개념은 문제에서 설명하니 기초 지식은 없어도 풀 수 있는 문제
* 쉬운 편인 것 같다.
* GPT 한테 코드 리뷰를 맡겼더니 다른 코드가 2종류가 나옴.
class Solution {
public int solution(int n) {
int answer = 0;
for (int i = 1; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
// i가 n의 약수인 경우
answer++;
// i가 n의 약수이면서 제곱근이 아닌 경우, n을 i로 나눈 몫도 약수이므로 answer를 추가로 증가시킴
if (i != Math.sqrt(n)) {
answer++;
}
}
}
return answer;
}
}
* 이건 내가 작성한 코드를 개선한 코드.
* Math.sqrt 를 사용해서 풀었다.
* 개선 가능한 부분은 아래와 같다.
* 주어진 숫자 n의 제곱근까지만 반복을 하면 된다. 왜냐면 n의 제곱근보다 큰 약수는 n을 나누어 떨어뜨릴 수 없기 때문.
* 내가 작성한 코드의 시간 복잡도는 O(n), 개선한 코드의 시간 복잡도는 O(sqrt(n)).
* 그래서 혹시나해서 문제에 대한 설명을 첨부한 후 다시 코드 리뷰를 부탁했다.
class Solution {
public int solution(int n) {
int count = 0;
for (int i = 1; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
// i가 n의 약수인 경우
int a = i;
int b = n / i;
if (a * b == n) {
count++;
}
// a와 b가 같지 않은 경우, 다른 순서쌍이므로 추가로 count를 증가시킴
if (a != b) {
count++;
}
}
}
return count;
}
}
* 역시 Math.sqrt 를 사용했고, 개선 방향을 숫자 n을 두 개의 숫자로 곱한 결과가 n이 되는
* 모든 순서쌍의 개수를 찾아야 한다고 했다.
* 시간 복잡도는 역시 O(sqrt(n)).
* 이런걸 보면 자바 문법에 대한 기본지식이 꽤 있어야 겠다는 생각이 든다.
* 다음에도 이렇게 코드 리뷰를 해봐야 겠다. ㅎㅎ
230727 학습.
728x90
'코딩테스트 연습 > 프로그래머스 Lv.0' 카테고리의 다른 글
프로그래머스 코딩테스트 lv.0 - 모스 부호 (1). (Java) (0) | 2023.07.29 |
---|---|
프로그래머스 코딩테스트 lv.0 - 개미 군단. (Java) (0) | 2023.07.28 |
프로그래머스 코딩테스트 lv.0 - 진료순서 정하기. (Java) (0) | 2023.07.26 |
프로그래머스 코딩테스트 lv.0 - 외계행성의 나이. (Java) (0) | 2023.07.25 |
프로그래머스 코딩테스트 lv.0 - 배열 자르기. (Java) (0) | 2023.07.24 |