백준(baekjoon)-c언어 정리

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: 마마마마라탕이 먹고싶다. 글고 양꼬치 먹고싶다..! 갑자기 먹고싶은게 참 많아졌다. 기어이 돼지가 되겠다는 꿈을 이루려나보다.

좋은 웹페이지 즐겨찾기