본문 바로가기
CODING/BAEKJOON

백준 C언어 5단계 1차원 배열 문제풀이 : 2577, 3052, 1546

by pharmerci 2021. 12. 21.
728x90

파이썬은 다시 코딩도장부터 공부하는걸로 하고,, C언어로 문제를 풀었습니다. 

 

 

 


2577

 

세 자연수 A B C를 입력받고 세 수를 곱한 결과에 0~9가 각각 몇번씩 쓰였는지 구하는 문제이다.

이걸 파이썬으로 풀다가 도저히 못풀겠어서 그냥 c언어로 방향을 돌렸다 ㅎ

 

 

 

원래 math.h 헤더파일 받아와서 pow 쓸라 했는데 더 쉬운 방법 생각해서 이걸로 했다.

그래서 사실 이 코드에서 2번줄은 필요없는거!

 

암튼암튼

a, b, c -> 입력받는 3개의수

d -> 세 수의 곱 저장

x[10] -> 주석 그대로임 ( 초기화를 꼭 해줘야함 )

num -> d를 자리수대로 쪼개주는 임시 변수

 

변수 소개는 이정도!

 

각자 입력을 받고 d에다가 세개 곱한거 저장해준다.

 

그다음에 while문 써서 d가 0이 될때동안 계속해서 10으로 나눈 나머지를 num에 저장하고 그 수를 인덱스로 하는 x배열 값을 1 추가한다. 그리고 d값을 10으로 나눈다.

 

이게 무슨소리냐면

 

예를들어 a*b*c가 837145902이라고 하자.

그러면 10으로 나눈 나머지는 2다! 이걸 num에 저장해두고 x[2]를 하나 더하면 2가 1개 있다는 것을 표시해준게 된다.

그리고 d를 10으로 나누면 몫이 83714590 이게 될 것이다.

 

그러면 다음에 또 10으로 나눈 나머지가 0 어쩌구 저쩌구~~ 된다.

 

하나씩 자리수를 빼내는 알고리즘이라 생각하면 됨!

 

그리고 이제 반복하면서 하나씩 출력해내면 끝!

 

 

 

 


3052

이 문제는 수 10개를 입력받은 뒤 이를 42로 나눈 나머지를 구하고, 서로 다른 값이 몇개 있는지 출력하는 문제이다.

 

 

 

num -> 숫자 입력받은거 배열

s -> 각 숫자의 나머지 구한거 배열

i, j -> 반복문 돌리는 용도

x -> 구하고자 하는 변수

count -> 똑같은거 몇개 나오는지 세는 변수

 

변수 소개는 이정도,,

 

일단 반복 돌리면서 숫자 하나씩 받고 이에 대한 나머지 저장

 

그리고 또 반복 돌리면서 count값은 0으로 초기화하면서 또 그 안에서 반복문 돌아갑니당(빙그르르..)

i부터 시작하지말고 i+1부터 시작!

만약 같으면 count를 하나씩 추가하는데 이게 0이면 겹치는게 하나도 없다는 뜻

 

이럴때 하나씩 겹치지 않는 수 1 추가.. 이런 느낌이다.

 

 

 

 

 

 


1546

기말고사를 망친 세준이의 점수를 조작하는 문제,,! ㅎ

세준이가 받은 점수중에 최댓값을 M이라 하고 모든 점수를 ((자기점수)/M)*100 으로 고쳤다.

이 점수들의 새로운 평균을 구하는 문제이다.(평균은 절대 혹은 상대오차가 10의 -2승 이하여야 함)

처음에 몇과목 봤는지 입력, 그만큼 점수 입력

 

 

 

N -> 과목 수

score -> 점수 입력받는 임시변수

avg -> 여기다가 입력받은 점수 하나씩 더해줄거임

i -> 반복문 돌리는 용도

M -> 점수 중 최댓값

 

일단 N 입력받아서 과목수 몇개인지 알도록 하고!

for문 돌리면서 점수 입력받고

avg에 그 입력받은 점수를 하나씩 더해준다.

동시에 입력받은 수가 M보다 크면 그게 지금까지 나온 수중에 가장 큰 수니까 최댓값으로 업뎃해준다.

 

여기까지 하면 입력받은 점수의 합을 구할 수 있다.

여기다가 싹 M으로 나누고 100을 곱하면 새로운 점수의 합을 구할 수 있다. 여기에 전체 과목 수인 N 나눠서 프린트하면 끝!

 

정수형으로 하면 오차가 너무 커버리니까 double형으로 처리해주기!

 

 

 

 

 

728x90