나 개발자 진짜 되냐?

코딩테스트 입문 - 분수의 덧셈 ( gcd 약분 ) 본문

프로그래머스를 풀어보아요!/C++

코딩테스트 입문 - 분수의 덧셈 ( gcd 약분 )

Snow Rabbit 2026. 4. 21. 15:41

 

반갑습니다.

입문 문제는 너무 쉬워서

블로그 쓸 일이 없을 줄 알았습니다.

 

하루 만에 왔습니다.

저는 아직..갈길이 멀군요...ㅋㅋㅋ

 

벌써 막히다니....

 

오늘의 문제를 풀어보겠습니다.

 



두 분수를 더하라고 하는데..

분자와 분모를 순서대로 담은 배열을 return 하라고 해서 당황했습니다.

그리고.. 친절하게?

 

문제 틀도 주어집니다.

벡터를 쓰라는거 같군요.

 

1. 분모 통일

 

분모 1과 분모 2를 통일시켜야 한다.

분모 2나 분모 1이 서로 나눠지는 관계면 더 큰애가 분모가 되어야 하고

그런 관계가 아니면 둘이 곱해준 값이 분모가 되어야 한다.

 

2. 분자 더해주기

 

분모 통일 과정에서

전자면 작은애 * 큰애분모 + 큰애 분자

후자면 서로서로 곱해주면 된다.

 

 

이렇게 풀긴 했는데..

틀렸단다.

 

지금 생각해 보니 분모가 같을 때를 생각 안 했다

그럴 땐 그냥 분자끼리 더해주면 끝인데..

 

 

하나 더 추가

 

근데도 틀렸다.

 

지금 또 생각해 보니

4, 6의 경우

분모는 12가 된다.

....

분모 분자 이런 라이브러리가 있을 거 같은데.. 긁적

번거롭게 되었다.

 

그리고 또 하나

문제 보니까 기약분수라고 적혀있다.

즉..

약분을 해야 한다.

 

...

약분..

아휴

 

인지 씨를 찾았다.

 

인지 씨는 최대공약수로 풀면

이렇게 if문을 좔좔 쓸 필요가 없다고 했다.

 

아..!

4랑 6의 경우 최대공약수가 2고

8이랑 5는 최대공약수가 1이다.

즉 반대로

그냥 무조건 다 서로 곱해주고

최대공약수로 약분하라는 거 같았다.

 

다시 작성..!

 

음....

 

다시 인지 씨를 찾았다.

 

만약에 1/2 + 1/2는 어떡할 거냐는 것이다.

지금은 최대공약수가 1이라 나눠지는데 문제는 없지만

이렇게 해주면 분수는 2/2 여서 1 이여야 하는데

 

저렇게 앞에다가 약분을 나눠버리면,

그냥 2,2가 출력되게 된다.

 

그래서 약분을 제일 마지막에 해주라고 한다.

 

네..

그래도 틀려버렸군요.

 

이제 보니 이 뜻이 아니었습니다.

 

분모만 약분해 버려서 그렇다고 합니다.

 

처음부터 결괏값에 약분해줘야 한다고 합니다.

 

아하..

 

 

아하...!!

 

그냥 일단 다 통분해 주고

마지막에 한 번만 약분해 주는 것이었다.

 

 

 

어??

 

너..?! 입문 아니지??

무슨 7점이나 주냐!

 


 

다른 사람의 풀이법을 봤다.

 

gcd를 쓰지 않고

최대공약수니까 제일 작은 수로 나눠지면 되어

저렇게 큰 수부터 넣어서 줄이고

둘 다 나눠지면

그 나눠지는 수를

answer에 넣어주면 됐다.

 

꽤 좋은 풀이인 거 같다.

 

뭐 내 코드랑 비슷하다.


프로그래머스는 백준과 다르게 함수를 주고

그 함수를 채워 넣는 방식이다 보니

 

ios::sync_with_stdio(0);

cin.tie(0);

를 안 써도 된단다..

 

cout이나 cin을 쓸 일이 없기 때문이란다..

너무너무 충격

하지만 이 친구들 외우는데 백만 년 걸렸는데

안 쓰면 또 까먹을 것이다.

 

근데 그것도 모르고 처음 문제 풀 때 써버렸다.

 

 

ㅋㅋㅋㅋㅋㅋ

하지만 저게 다 필요 없다니..

오케이 알겠습니다..

 

 

고생했습니다.

이제 한 문제 풀었다고요!!!!

 

이렇게 어려운 거 4개면 지칠 거 같다.

나약한 나