[CodeUp/C] C언어 기초 100제
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");
}
}