System

[CodeUp/C] C언어 기초 100제

오호츠크해 기단 2023. 1. 11. 17:11
728x90

1. 1027 : [기초-입출력] 년월일 입력 받아 형식 바꿔 출력하기

https://codeup.kr/problem.php?id=1027

년월일(yyyy.mm.dd)를 입력받아, 일월년(dd-mm-yyyy)로 출력해보자.
(단, 한 자리 일/월은 0을 붙여 두자리로, 년도도 0을 붙여 네자리로 출력한다.)

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	int y, m, d;
	scanf("%d.%d.%d", & y, &m, &d);
	printf("%02d-%02d-%04d", d, m, y);
}

 

 

 

 

2. 1030 : [기초-데이터형] 정수 1개 입력받아 그대로 출력하기3

https://codeup.kr/problem.php?id=1030

정수 1개를 입력받아 그대로 출력해보자.
(단, 입력되는 정수의 범위는 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 이다.)

자료형 범위 출력 기호
int -2,147,483,648 ~ +2,147,483,647 %d
unsigned int 0 ~ 4,294,967,295 %u
long long int -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 %lld
float +- 3.4*10-38 ~ +- 3.4*1038 %f
double +- 1.7*10-308 ~ +- 1.7*10308 %lf
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	long long int data;
	scanf("%lld", &data);
	printf("%lld", data);
}

 

 

 

 

3. 1031 : [기초-출력변환] 10진 정수 1개 입력받아 8진수로 출력하기

https://codeup.kr/problem.php?id=1031

10진수를 입력받아 8진수(octal)로 출력해보자.

10진수 %d
8진수(octal) %o
16진수(hexadecimal) %x(소문자), %X(대문자)
문자 %c
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	int n;
	scanf("%d", &n);
	printf("%o", n);
}

 

 

 

 

4. 1038 : [기초-산술연산] 정수 2개 입력받아 합 출력하기1

https://codeup.kr/problem.php?id=1038

정수 2개를 입력받아 합을 출력하는 프로그램을 작성해보자.
(단, 입력되는 정수는 -1073741824 ~ 1073741824 이다.)
이 문제의 경우 입력이 1073741824, 1073741824일 때 값이 2147483648(1073741824+ 1073741824)으로 int 자료형 범위를 넘어서기 때문에 입력받는 변수의 자료형이 int가 아닌 long long int가 되어야 한다.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	long long int a, b;
	scanf("%lld%lld", &a, &b);
	printf("%lld", a+b);
}

 

 

 

 

5. 1047 : [기초-비트시프트연산] 정수 1개 입력받아 2배 곱해 출력하기

https://codeup.kr/problem.php?id=1047

정수 1개를 입력받아 2배 곱해 출력해보자.
*비트단위시프트연산자 (<<, >>): 정수를 2배로 곱하거나 나누어 계산해 준다.

[예시]
int a=10;
printf("%d", a<<1); //10을 2배 한 값인 20 이 출력된다.
printf("%d", a>>1); //10을 반으로 나눈 값인 5 가 출력된다.
printf("%d", a<<2); //10을 4배 한 값인 40 이 출력된다.
printf("%d", a>>2); //10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.

a << b는 a를 2^b배 곱한 값
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	int n;
	scanf("%d", &n);
	printf("%d", n << 1);
}

 

 

 

 

6. 1052 : [기초-비교연산] 두 정수 입력받아 비교하기4

https://codeup.kr/problem.php?id=1052

두 정수(a, b)를 입력받아 a와 b가 서로 다르면 1을, 그렇지 않으면 0을 출력하는 프로그램을 작성해보자.
== 같음
!= 다름
>= 크거나 같음
>큼
<= 작거나 같음
< 작음

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	int a, b;
	scanf("%d %d", &a, &b);

	if (a != b)
		printf("1");
	else
		printf("0");
}

 

 

 

 

7. 1058 : [기초-논리연산] 둘 다 거짓일 경우만 참 출력하기

https://codeup.kr/problem.php?id=1058

두 개의 참(1) 또는 거짓(0)이 입력될 때, 모두 거짓일 때에만 참이 계산되는 프로그램을 작성해보자.
and(&&): 둘 다 참인 경우에만 참
or(||): 둘 중 하나만 참이더라도 참

#include <stdio.h>
int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", !(a||b));
}

 

 

 

 

8. 1062 : [기초-비트단위논리연산] 비트단위로 XOR 하여 출력하기

https://codeup.kr/problem.php?id=1062

입력된 정수 두 개를 비트단위로 xor 연산한 후 그 결과를 정수로 출력해보자.
비트단위(bitwise) 연산자 종류

  • ~(bitwise not)
  • &(bitwise and)
  • |(bitwise or)
  • ^(bitwise xor)
  • <<(bitwise left shift)
  • >>(bitwise right shift)
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	int a, b;
	scanf("%d %d", &a, &b);
	printf("%d", a ^ b);
}

 

 

 

 

9. 1064 : [기초-삼항연산] 정수 3개 입력받아 가장 작은 수 출력하기

https://codeup.kr/problem.php?id=1064

입력된 세 정수 a, b, c 중 가장 작은 값을 출력하는 프로그램을 작성해보자.
단, 조건문을 사용하지 않고 3항 연산자 ? 를 사용한다.

#include <stdio.h>
int main()
{
    int a, b, c;
    scanf("%d%d%c", &a, &b, &c);
    printf("%d", a<b ? (a<c?a:c) : (b<c?b:c) );
}

 

 

 

 

10. 1070 : [기초-조건/선택실행구조] 월 입력받아 계절 출력하기

https://codeup.kr/problem.php?id=1070

월이 입력될 때 계절 이름이 출력되도록 해보자.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	int season;
	scanf("%d", &season);
	switch(season) 
	{
	case 12:
	case 1:
	case 2:
		printf("winter");
		break;
	case 3:
	case 4:
	case 5:
			printf("spring");
			break;
	case 6:
	case 7:
	case 8:
			printf("summer");
			break;
	case 9:
	case 10:
	case 11:
			printf("fall");
	}
}

 

 

 

 

11. 1071 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기1

https://codeup.kr/problem.php?id=1071

0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자.
while( ), for( ), do~while( ) 등의 반복문을 사용할 수 없다.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	int n;
zero:
	scanf("%d", &n);
	if (n != 0) {
		printf("%d\n", n);
		goto zero;
	}
}

 

 

 

 

12. 1076 : [기초-반복실행구조] 문자 1개 입력받아 알파벳 출력하기

https://codeup.kr/problem.php?id=1076

do
{ //코드블록
...
}while(조건); //do~while( ) ; 구조는 반드시 마지막에 세미콜론(;)을 붙여야 한다.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	char c, al='a';
	scanf("%c", &c);
	do {
		printf("%c\n", al);
		al++;
	} while (al < c+1);
}

 

 

 

 

13. 1085 : [기초-종합] 소리 파일 저장용량 계산하기

https://codeup.kr/problem.php?id=1085

1초 동안 마이크로 소리강약을 체크하는 수를 h (헤르쯔, Hz 는 1초에 몇 번? 체크하는가를 의미한다.)
한 번 체크한 결과를 저장하는 비트 b (2비트를 사용하면 0 또는 1 두 가지, 16비트를 사용하면 65536가지..)
좌우 등 소리를 저장할 트랙 개수인 채널 c (모노는 1개, 스테레오는 2개의 트랙으로 저장함을 의미한다.)
녹음할 시간 s가 주어질 때,
필요한 저장 용량을 계산하는 프로그램을 작성해보자.

8 bit(비트) = 1byte(바이트) //8bit=1Byte
1024 Byte(2^10 byte) = 1KB(킬로 바이트) // 1024bit=1KB
1024 KB(2^10 KB) = 1MB(메가 바이트)
1024 MB(2^10 MB) = 1GB(기가 바이트)
1024 GB(2^10 GB) = 1TB(테라 바이트)
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void) {
	long long int h, b, c, s;
	scanf("%lld%lld%lld%lld", &h, &b, &c, &s);

	double bite = h * b * c * s;
	printf("%.1f MB", bite / (8 * 1024 * 1024));
}

 

 

 

 

14. 1090 : [기초-종합] 수 나열하기2

https://codeup.kr/problem.php?id=1090

시작 값(a), 등비(r), 몇 번째인지를 나타내는 정수(n)가 입력될 때 n번째 수를 출력하는 프로그램을 만들어보자.
*제1항이 a이고 공비가 r인 등비수열의 일반항은 an = arn - 1

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <math.h>
int main(void) {
	long long int a, r, n;
	scanf("%lld%lld%lld", &a, &r, &n);
	long long int ans = a * pow(r , (n - 1));
	printf("%lld", ans);
}

 

 

 

 

15. 1095 : [기초-1차원배열] 이상한 출석 번호 부르기3

https://codeup.kr/problem.php?id=1095

출석 번호를 n번 무작위로 불렀을 때, 가장 빠른 번호를 출력해 보자.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main(void) {
	int n, i, MIN=24;
	int k[1000000];
	scanf("%d", &n);

	for (i = 0; i < n; i++) {
		scanf("%d", &k[i]);
		if (k[i] < MIN)
			MIN = k[i];
	}
	printf("%d", MIN);
}

+코드가 맞는 것 같은데 자꾸 오류가 나서 오류 문구를 자세히 읽어보니..해답을 찾을 수 있었다..
처음에 배열 크기를 1000으로 설정했는데 이 설정한 배열 크기가 너무 작았던 것!!

 

 

 

 

16. 1096 : [기초-2차원배열] 바둑판에 흰 돌 놓기

https://codeup.kr/problem.php?id=1096

바둑판(19 * 19)에 n개의 흰 돌을 놓는다고 할 때, n개의 흰 돌이 놓인 위치를 출력하는 프로그램을 작성해보자.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main(void) {
	int Baduk[19][19]={0,}; //0으로 초기화
	int x, y, n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d%d", &x, &y);
		Baduk[x-1][y-1] = 1;
	}

	for (int i = 0; i < 19; i++) {
		for (int j = 0; j < 19; j++)
			printf("%d ", Baduk[i][j]);
		printf("\n");
	}
}

 

 

 

 

17. 1098 : [기초-2차원배열] 설탕과자 뽑기

https://codeup.kr/problem.php?id=1098

격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l), 막대를 놓는 방향(d:가로는 0, 세로는 1)과 막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때, 격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main(void) {
	int h, w, n, l, d, x, y;
	int board[100][100]={0, };

	scanf("%d%d", &h, &w);
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d%d%d%d", &l, &d, &x, &y);
		for (int k = 0; k < l; k++) {
			if (d == 0) { //가로
				board[x-1][y-1] = 1;
				y++;
			}
			if (d == 1) { //세로
				board[x-1][y-1] = 1;
				x++;
			}
		}
	}

	for (int i = 0; i < h; i++) {
		for (int j = 0; j < w; j++) {
			printf("%d ", board[i][j]);
		}
		printf("\n");
	}
}

 

 

 

 

18. 1099 : [기초-2차원배열] 성실한 개미

https://codeup.kr/problem.php?id=1099

미로 상자에 넣은 개미는 먹이를 찾았거나, 더 이상 움직일 수 없을 때까지 오른쪽 또는 아래쪽으로만 움직였다. 미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고, 먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.
단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는더이상 이동하지 않고 그 곳에 머무른다고 가정한다.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main(void) {
	int box[10][10] = {0,};
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			scanf("%d ", &box[i][j]);
		}
	}
	int x = 1, y = 1;
	while (1) {
		if (box[x][y] == 0) {
			box[x][y] = 9;
			y++;
		}
		if (box[x][y] == 1) {
			y--;
			x++;
		}
		if (box[x][y] == 2) { //먹이를 찾았을 경우
			box[x][y] = 9;
			break;
		}
        //맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우
		else if (box[x][y + 1] == 1 && box[x + 1][y] == 1) {
			if (box[x][y] == 0)
				box[x][y] = 9;
			break;
		}
	}

	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			printf("%d ", box[i][j]);
		}
		printf("\n");
	}
}