호재요? 아니요 호젠데요

coding3·2022년 4월 12일

coding3

목록 보기
1/2

잡소리

일을 때려치고 독학을 시작한지 어느덧 4개월이 되었다.
이것 저것 여러가지를 공부하다보니 머릿속이 중구난방이 되어버린 상황이다.
고등학생때 C만 해봤는데 자바도 해야되고 DB도 해야되고 STS도 해야되고 열심히 책 보면서
실습을 조져봤지만 항상 조져지는건 나였다고한다. ▶◀R.I.P.......

잠시 머리를 식힐 겸 이번주는 몇달동안 미뤄뒀던 백준 골드달기 프로젝트를 진행해보기러 했다.
시작 일시 : 2022/4/11
시작 당시 티어 : S1 , 660점 (G5까지 -140점)

  • 대뜸 이틀전 얘기를 들고와서 글을 쓰고 있는 것은 신나게 코딩을 하다가 막혔다는 이야기다.

유클리드씨와의 만남

어떤 분야를 풀며 머리를 식혀나갈까 고민하던 중, '#유클리드 호제법' 알고리즘 태그를 만났다.
유클리드 대센빠이 오랜만에 봽는다.

잠시 유클리드 센빠이의 용안을 뵙고 가도록하자.

꺼무위키 피셜 인류 최초의 알고리즘.
우리는 이 알고리즘의 시초부터 시작해야했던 것이다.
유클리드 호제법은 이렇게 적혀있다.
int a,b(a > b > 0)에 대해서 a = b * q + r일 경우, a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
이를 좀 더 깐지나고 있어보이게 쓰면 GCD(a,b) == GCD(b,r) 이라고 보면 된다.
위의 식에서 r == 0이면 a와 b의 최대 공약수는 b가 되버린다! 굉장히 엄청나는 상황이다!

그래서 그걸 어따 쓰게 **아

아 이거를 C에서 코드로 작성하면 더욱 더 굉장히 몬가가 몬가 엄청난 상황이 탄생해 버린다.

int gcd(int a, int b) {
	if (b == 0)
    	return a;
    else
    	return gcd(b, a % b);
}

이 4줄짜리 코드로 5문제 뚝딱 해먹었다. 국밥이 따로 없잖아.....
이 함수의 리턴값은 두 수의 최대공약수가 나와버린다....

잠시 수치플이지만 3달 전, 42서울에 들어가기 전 혼자 풀 때 백준 2609번 (최대공약수, 최소공배수)을
풀었던 흔적이 남아 있어서 코드를 긁어와본다.

#include<stdio.h>

int main()
{
	int a, b;
	int i;
	int k=0;
	int mx = 1;
	scanf("%d %d", &a, &b);
	if (a >= b)
		k = a / 2;
	if (b >= a)
		k = b / 2;
	for (i = 1;i <= k;i++)
		if (a % i == 0 && b % i == 0)
			mx = i;
	if (a == b)
		printf("%d\n%d", a, b);
	else
		printf("%d\n%d", mx,(a*b)/mx);
	return 0;
}

당시 풀이 방법을 찾아보니 나름 머리를 쓴 것이 a,b중 큰 값의 절반 지점까지 반복문을 돌리며
두 수의 최대 공약수를 찾고, 뭐 암튼 자기딴엔 무지성으로 머리를 좀 굴린 것 같다.

뭐 아무튼 돌아는가서 정답을 맞췄으니 된거 아니냐!

(대가리를 돌리랬더니 정말 대가리를 돌려서 해결해버린 케이스.다.)

방금 글을 작성하며 다시 작성한 코드는 이러하다.

#include<stdio.h>

int gcd(int a, int b) {
	if (b == 0)
		return a;
	else
		return gcd(b, a % b);
}

int main() {
	int a, b;
	scanf("%d %d", &a, &b);
	printf("%d\n%d", gcd(a, b), a * b / gcd(a, b));
	return 0;
}

코이츠wwwwwwww 3달 전의 나란 녀석의 코드보다 메인 함수를 1/3으로 줄여버린wwwwwwwww
3달 전의 나 녀석 반성하라구wwwwwwwwwwwwwww

아무튼 그렇다.... 그렇게 유클리드 호제법으로 실버 언저리 문제들을 풀어봐서 행복한 나머지 이렇게 글을 써봤습니다.

마....마지막으로......


유클리드 센세..... 호제는 필요 없고, 호재는 언제 오나요....

profile
코딩삼 이대로 가면.....

0개의 댓글