백준(baekjoon)-c언어 정리

SUIN·2022년 4월 14일
0

백준/프로그래머스

목록 보기
18/18
post-thumbnail

2914 저작권

#include<stdio.h>

int main(void){
	int melody, result, avg;
	scanf("%d %d", &melody, &avg);
	result=melody*(avg-1)+1;
	printf("%d", result);
}

입력받은 값으로 저작권의 개수 계산
-> 저장권이 있는 멜로디의 개수=곡의 개수 * 평균값

  • 조건: 평균값을 올림하여 정수로 만들어야함
    ->평균값을 무조건 올림처리를 하므로 주어진 평균값보다 1 작은 값이 되도록 하는 멜로디 개수를 구하고 거기서 1을 더해준다.

3046 R2

#include<stdio.h>

int main(void){
	
	int r1, s, r2;

	scanf("%d %d", &r1, &s);
	r2=2*s-r1;
	printf("%d",r2);

}

s=(r1+r2)/2이므로 r2에 대한식으로 변환하여 값을 구한다.
r2=2* s-r1


3052 나머지

#include <stdio.h>


int main(void){
	int i,j, ip, count, result=0, suin[10];
	
	for(i=0;i<10;i++){
		scanf("%d", &ip);
		suin[i]=ip%42;
	}
	for(i=0;i<10;i++){
		count=0;
		for(j=i+1;j<10;j++){
			if(suin[i]==suin[j])
				count++;	
		}
		if(count==0)
			result++;
	}
	
	printf("%d", result);
}

숫자 10개를 입력받고 각각의 숫자를 42로 나눈 나머지를 저장해둔다.
저장해둔 숫자를 하나씩 다른 숫자들과 비교해보고(1번째 숫자는 2~10숫자 비교, 2번째숫자는 3~10까지 비교)
같은 숫자가 없는 경우(count==0)에 숫자를 하나 카운트해준다.

++다른 사람 코드

#include <stdio.h>

int arr[42];

int main(){
	int x;
	int ans = 0;
	
	for(int i=0;i<10;i++){
		scanf("%d",&x);
		arr[x%42] = 1;
	}
	
	for(int i=0;i<42;i++)
		ans += arr[i];
	
	printf("%d",ans);
	
	return 0;
}

출처: https://rujang.tistory.com/entry/%EB%B0%B1%EC%A4%80-3052%EB%B2%88-%EB%82%98%EB%A8%B8%EC%A7%80-CC

입력받은 후에 나머지 값에 따른 위치에 1을 저장해둔다.(중복되더라도 1을저장하므로 지장이 없다)
반복문으로 1이 있을 때마다 카운트하여 출력


4344 평균은 넘겠지

#include <stdio.h>


int main(void){
	int inp, student, i,j, grade[1000];
	double avg;
	
	scanf("%d", &inp);
	double result[inp];
	
	for(i=0;i<inp;i++){
		avg=0;
		result[i]=0;
		scanf("%d", &student);
		for(j=0;j<student;j++){
			scanf("%d", &grade[j]);
			avg+=grade[j];
		}
		avg/=student;
		for(j=0;j<student;j++){
			if(avg<grade[j]){
				result[i]++;
			}
		} 
		result[i]=(result[i]*100)/student;
        printf("%.3lf%% \n", result[i]);	
	}	
}

점수를 모두 합산하고 인원수만큼 나눈 나머지(==평균)을 구하여 결과에 저장한 후 출력


8958 OX퀴즈

#include <stdio.h>
#include <string.h>

//strlen()=문자열의 길이를 반환하는 함수, <string.h> 필요  

int main(void){
	int inp, i ,j, sum, score; 
	char suin[80];
	
	scanf("%d", &inp);
	
	for(i=0;i<inp;i++){
		sum=0;
		score=1;
		
		scanf("%s", suin);
		
		for(j=0;j<strlen(suin);j++){
			if(suin[j]=='O'){
				sum +=score;
				score++;
			}
			if(suin[j]=='X'){
				score=1;
			}
		}
		printf("%d \n", sum);
	}
}

참고: https://develop247.tistory.com/16
문자열을 저장할 수 있는 char형 배열에 ox를 입력받기
문자가 o인지 x인지를 구분하고, o이면 x가 나올 때까지 점점 증가하는 점수를 결과에 더해가며 저장, x가 등장하면 점수를 1로 초기화
위 과정을 배열의 길이만큼, 지정된 횟수만큼 반복하기
총 점수 출력


벨로그는 이렇게 쓰는게 맞는가 싶다. 내멋대로 쓰고 있는데 음~ 어차피 나 보는 용으로 쓰는 거니까 괜찮지 않나라는 생각이다.

글고 코드 하나씩 작성하면서 느낀 건데, 나는 for문을 참 많이 쓰는 것같다. 기본 문법만 아는 까닭인지 아니면 그런 문제들만 푸는 것인지, 죄다for문 아니면 if문이다.
다른 사람들이 작성한 코드도 봐가면서 새롭게 배울 필요가 있을 것 같다. 참고를 해서 문제를 풀고 공부하는 것과 배끼는 것 사이의 경계가 아직은 참 모호해서 꺼려지긴 하지만 이따구로 할거면 차라리 배껴도 보면서 시도는 할 필요가 있다고 판단된다..
for문을 이중 삼중 중첩하다보면 참 지저분한 것 같다.

오늘의 tmi: 마마마마라탕이 먹고싶다. 글고 양꼬치 먹고싶다..! 갑자기 먹고싶은게 참 많아졌다. 기어이 돼지가 되겠다는 꿈을 이루려나보다.

profile
공부하기싫을때붙잡고공부해봤자비명밖에안나옵니다지금제가그래요

0개의 댓글