<문제 제시>
<문제설명>
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로
(a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때
두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.
<예시 입출력>
<문제 해결 과정>
특정 숫자가 정해질때 두 숫자의 곱이 그 특정숫자가 되도록 하는 숫자 순서쌍을 찾는 문제이다.
Try 1) 시간 초과 및 모든 테스트 통과 실패
/*
>> 두번째 반복문에서 조건식을 생략했던 점이 시간초과의 원인인 것 같았다.
>> 실제 곱셈 로직을 생각하기보다 어떻게하면 answer값이 증가될 수 있을지 생각해야할 것 같았다.
*/
// 첫번째 매개변수 (이중 반복문 처리)
for(int i = 1; i <= n; i++){
// 두번째 매개변수 인덱스 (주어진 자연수로 지정한다.)
for(int k = n ; ; k--){
// k가 0에 도달하면 종료
if(k == 0) break;
// 첫번째 매개변수와 두번째 매개변수의 곱이 n과 일치하면 증가
if(k * i == n) {
answer += 1;
}
}
}
마냥 특정 숫자를 탐색해가며 이중 반복문을 통해 두 매개변수의 곱이 n과 일치할때 answer값을 증가시키고자 하였다.
Solution 1)
약수를 찾는 문제라고 할 수 있다.
20의 약수라고 하면, 1, 2, 4, 5, 10, 20이므로
양 끝값을 곱하는 순서쌍을 찾으면 된다.
ex. (1, 20), (2, 10), (4, 5)
= 3개이다.
if(n % i == 0) {
answer++;
}
약수를 찾는 로직은 %를 통해 나머지를 구하는 로직이므로 간단하였다.
<전체코드>
public class ordered_pair {
public static int solution(int n) {
int answer = 0;
for(int i = 1; i <= n; i++) {
// 20의 약수이면 answer 증가
if(n % i == 0) {
answer++;
}
}
return answer;
}
public static void main(String[] args) {
int n = 20;
System.out.println(solution(n));
}
}
간단한 약수 구하기 문제였지만 문제를 읽고 바로 떠오르지 않았다.
초반 이중 반복문을 통해 구하고자 하였으나 순서쌍을 찾는 문제이다 보니 여러 조건문을 작성해야했다.
약수를 구하는 방법으로 알고리즘을 풀어낼 수 있었다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120836
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '2차원으로 만들기' - Java (0) | 2023.04.28 |
---|---|
[프로그래머스] '모스부호 (1)' - Java (0) | 2023.04.28 |
[프로그래머스] '진료 순서 정하기' - Java (0) | 2023.04.27 |
[프로그래머스] '옹알이 (1)' - Java (0) | 2023.04.26 |
[프로그래머스] '대문자와 소문자' - Java (0) | 2023.04.26 |