본문 바로가기
CODING/BAEKJOON

백준 C언어 문제 풀이 : 1085, 2609, 10039, 10870, 2576, 2480

by pharmerci 2022. 1. 20.
728x90

1085

 

 

x, y, w, h를 받아서 x,y에서 직사각형의 경계선으로 가는 거리의 최소값을 구하는 프로그램을 작성해야 한다.

 

 

 

 

 

일단 x, y, w, h를 순서대로 받았다.

 

그리고 내가 문제를 푼 방식은 x와 w-x 중에 작은 수를 x로 설정(1),

y와 h-y 중에 작은 수를 y로 설정(2),

x, y중에 작은 수(3)를 출력

 

이런식으로 진행했다.

 

어차피 1, 2의 과정에서 더 큰수는 최솟값이 될 수 없기 때문에 일단 한번 걸러줬고

1, 2 과정에서 작은 수여서 x, y로 설정된 수 중 비교하면 최솟값을 얻어낼 수 있다.

x, y, w, h가 모두 양수이고 x, y는 직사각형 안에서 움직이는 수들이기 때문에 음수 고려를 할 필요가 없어서 편했다.

 

 

 

 

 


2609

 

두 자연수를 입력받아 최대공약수, 최소공배수를 출력하는 프로그램을 작성해보자.

 

 

 

a, b : 입력받는 수들을 저장하는 변수

i : 반복문 전용

yak, bae : 최대공약수, 최소공배수 저장하는 변수

small : a랑 b중에 더 작은 수를 저장하는 변수

 

일단 scanf로 a, b 입력받고

최대공약수를 고르기 위해서 일단 a랑 b중에 더 작은 수를 if문을 이용해 골라두었다.

 

왜냐하면 두 수를 어떤 수로 나누었을 때 둘 다 0이 되는 수가 공약수인데 더 작은수로 나누었을 때의 나머지가 0일때까지만 생각을 해주는게 좋기 때문이다.

 

그니까 예를 들어 24랑 6이 있는데.

1부터 6까지만 두 수를 각각 나눠보면서 공약수를 찾는게 의미가 있지 12, 18 등의 수로 6을 나누는 것은 공약수를 찾을 때 필요없는 행동이기 때문이다.

 

암튼 그래서 16번째줄부터!

반복문을 이용하여 1부터 small까지 하나씩 증가하며 a랑b를 둘다 i로 나머지연산 처리를 했을 때 0이 나온다면 이것은 두 수의 공약수가 된다.

이럴때마다 yak 변수를 업데이트해준다. 작은 수부터 i를 증가시키므로 맨 마지막에 들어와있는 yak이 최대공약수일 것이다.

 

최소공배수는 

 

중학교때인가,, 초등학교때 배운 요 개념을 사용해서 최소공배수를 구해주었다.

 

그리고 프린트 하면 끝!

 

 

 

 

 


10039

 

5명 학생의 기말고사 점수를 받아서 평균을 구한다.(단 40점 미만인 학생은 40점으로 처리한다.)

 

 

score[5] : 5명의 점수를 저장하는 배열

sum : 5명의 점수를 합해줄 변수

i : 반복문용

 

5번 반복하면서 점수를 하나씩 받는다.

만약에 그 점수가 40점 미만이면 40점으로 처리한다.

sum변수에 하나씩 더해준다.(처음에 sum을 0으로 초기화해둬야함)

 

5로 나눈 값을 출력한다.

 

 

 

 


10870

 

n이 주어졌을 때 n번째의 피보나치 수를 구하는 프로그램을 작성해보자.

 

 

 

for문을 이용하면 더 쉬울 것 같은데, 재귀함수를 이용하라고 했으니 재귀함수를 이용해서 코드를 짰다.

 

n을 입력받고 fibo(n) 값을 출력하기로 했다.

 

만약 n이 0이면 0이니까 0을 리턴하고, n이 1이면 1이니까 1을 리턴한다. 그 두개가 아닐 때에는

전항과 전전항을 더한 값을 리턴한다. 이 과정을 fibo(n)이 될때까지 반복해주면 n번째 피보나치수가 나오게 된다.

 

 

 

 

 


2576

 

7개의 자연수가 주어질때 홀수인 자연수들을 골라 합을 구하고 홀수 중 최솟값을 찾는 프로그램을 작성하자.

 

 

 

nature[7] : 자연수들 저장하는 배열

odd : 홀수들의 합을 구할 변수

oddlist : 홀수들 중 최솟값을 찾기위해 만든 홀수리스트 배열

i : 반복문

small : 홀수들 중 최솟값

 

일단 nature배열에 하나씩 입력을 받는다. 이 수를 2로 나누었을때의 나머지가 1이라는 것은 홀수라는 뜻이므로 이 경우에는 odd에 그 수를 더해주고 oddlist에도 추가해준다.

2로 나누었을때의 나머지가 0이라는것은 짝수라는 뜻이므로 이 경우에는 그냥 oddlist에 0을 저장해준다.

 

small을 100으로 선언했는데, 어차피 자연수는 100보다 작으니까 oddlist에서 100보다 큰 수는 없을 것이고 차례로 업데이트 해주기 위해서 이렇게 선언했다.

 

그리고 odd가 0이면 이 7개의 자연수는 모두 짝수라는 뜻이다. 그러므로 -1을 출력한다.

그렇지 않으면 홀수들의 최솟값을 찾아야하는데, 반복문을 돌리면서 oddlist배열의 값이 0이 아니면서도 oddlist배열의 값이 small보다 작으면 small의 값을 oddlist배열의 값으로 업데이트해준다.

 

반복문이 끝나면 small에는 oddlist에 있는 홀수 중 가장 작은 수가 들어가 있을 것이다.

 

그러고 나서 odd랑 small을 각각 출력해주면 된다.

 

 

 

 


2480

 

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 
  2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 
  3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.  

3개 주사위의 나온 눈이 주어질때 상금 계산 프로그램을 작성해보자

 

 

 

R1, R2, R3 : 주사위 나온 수 받는 변수

price : 상금

 

8-9 줄 : 세개 다 같은 경우

11-16 줄 : 두개만 같은 눈인 경우

17-23 줄 : 모두 다른 눈이 나오는 경우(R1이 제일 큰 경우, R2가 제일 큰 경우, R3가 제일 큰 경우로 나누어서 품)

 

 

 

백준 푸는 사람들이 실버~ 골드~ 어쩌구 하던데 이런게 있다는걸 어제 발견했ㅋㅋㅋㅋㅋㅋ

실버군요 저는,,, 언능 골드가 되어보겠습니다.

 

 

728x90