두 수의 최소공배수를 출력하는 간단한 문제이다.
1. 테스트 케이스 n 입력 받기
2. a, b 입력 받기
3. 최소공배수 구하기
vector를 이용하여 a, b를 입력 받을 것이다.
그럼 헤더를 추가해주어야 한다.
#include <vector>
그리고 테스트 케이스와 vector를 통한 a, b 입력 받기
int n;
cin >> n;
vector<pair<int,int>> vec;
int a,b;
for(int i = 0; i < n; i++){
cin >> a >> b;
vec.push_back(make_pair(a,b));
}
완벽하게(?) vector에 값이 들어간다.
그리고 이 문제를 해결하는데에 핵심 역할이 되는 함수를 선언해준다.
int lcm(ll a, ll b){
return (a * b) / gcd(a, b);
}
위와 같이 최소공배수를 구할 수 있다.
gcd라는 함수를 사용하기 위해서는 헤더를 추가해야한다.
#include <algorithm>
헤더를 추가해도 gcd 와 같이 오류가 뜬다.
필자는 macOS에서 c++17 버전을 사용한다.
stackoverflow에 검색해보니 아래와 같은 헤더를 하나 더 추가해야하더라.
#include <numeric>
그렇다면 오류선이 사라지게 된다.
이제 선언한 함수를 이용해서 최소공배수를 출력해주자.
for (int i = 0; i < n; i++) {
int a = vec[i].first;
int b = vec[i].second;
cout << lcm(a, b) << '\n';
}
제출하면
ㅋㅋ
틀렸다.
왜 틀렸을까~
문제를 잘 읽어보자.
Integer로 선언한 변수가 문제일 것 같았다.
int lcm(), int a,b 등 Integer 형태로 선언한 변수를 long long 타입으로 변경해주자.
하 드디어 맞았다.
전체 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
//LCM
using namespace std;
typedef long long ll;
ll lcm(ll a, ll b){
return (a * b) / gcd(a, b);
}
int main(){
ll n;
cin >> n;
vector<pair<int,int>> vec;
ll a,b;
for(int i = 0; i < n; i++){
cin >> a >> b;
vec.push_back(make_pair(a,b));
}
for (int i = 0; i < n; i++) {
ll a = vec[i].first;
ll b = vec[i].second;
cout << lcm(a, b) << '\n';
}
return 0;
}
실버5 단계의 문제였다. 코드가 완벽하다고 생각해도 '틀렸습니다'라는 문구를 보면 어떻게 해야하나 라는 생각이 든다.
그래도 이번 문제에서의 오류는 쉽게 찾을 수 있었다. Integer가 아닌 long long 타입으로의 변경.
long long n; 과 같이 선언해도 되는데
귀찮으니까 필자는 typedef 를 통해서 약자를 사용하기로 하였다.
대단한 기술은 아니지만 알고리즘 수업을 들으면서 익혔던 약간의 기술?이다. 하하 !!
필자를 제외하고 알고 있는 사람들이 많은 것 같긴하지만.. 내 자의적으로 이 코드를 사용해본 건 처음? 혹은 오랜만인 것 같다.
문제를 풀고 틀리고, 혼자서 오류를 찾고 맞추니 기분이 참 좋다 ^^
더 좋은 풀이가 있다면 댓글로 알려주세요 !!
피드백 환영입니다☺️
'Algorithm' 카테고리의 다른 글
[백준] 1107번 : 리모컨 - C/C++ (0) | 2025.03.31 |
---|---|
[백준] 1436번 : 영화감독 숌 - C/C++ (2) | 2025.03.26 |
[백준] 10773번 : 제로 - C/C++ (0) | 2025.03.19 |
[백준] 13023번 : ABCDE - C/C++ (0) | 2025.03.17 |
[백준] 16953번 : A → B - C/C++ (1) | 2025.03.16 |