상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.
상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.
이런 상근이를 불쌍하게 보던 창영이는 자신이 사용하는 방법을 추천해 주었다.
바로 "45분 일찍 알람 설정하기"이다.
이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.
현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.
시간과 분을 받아오고 분이 45보다 작으면 if문2개를 사용해서 경우에 따라 알맞게 시간을 출력하게한다
#include <stdio.h>
int main(){
int h,m;
scanf(" %d %d",&h,&m);
if(m<45){
m +=15;
if(h == 0){
h = 23;
}else{
h -= 1;
}
}else{
m -= 45;
}
printf("%d %d",h,m);
return 0;
}
준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.
영수증에 적힌,
- 구매한 각 물건의 가격과 개수
- 구매한 물건들의 총 금액
을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.
문제에서 주어진 값을 입력받고 총합 sum이라는 변수로 for문으로 입력횟수 만큼 반복한 후 입력직후의 값을 sum에 넣는 것을 반복한다. 후에 if문으로 판별해 Yes 혹은 No를 출력한다
#include <stdio.h>
int main(){
int X,N,sum = 0,a,b;
scanf("%d", &X);
scanf("%d", &N);
for(int i = 0;i<N;i++){
scanf(" %d %d",&a,&b);
sum += a * b;
}
if(sum == X){
printf("Yes");
}else{
printf("No");
}
return 0;
}
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
count에 공백의 횟수를 세서 단어의 갯수를 구한 값을 때려넣고 출력해버릴 것이다. 저 last는 출력이 잘 안나와서 테스트하고 지우기 귀찮아 남아있는 잔해이다. 공백이 잘 입력되도록 fgets로 문자열을 입력받는다 포인터와 공백을 그냥 비교하면 안된다길래 굳이 포인터 blank를 만들었다. 그래서 카운트를 더하고 처음과 마지막에 있는 공백을 판별해서 빼면 잘 출력할 수 있다.
#include <stdio.h>
#include <string.h>
int main(){
int count = 0;
int last = 0;
char sen[10000001],blank[2] = " ";
fgets(sen, sizeof(sen), stdin);
for(int i=0;i<strlen(sen);i++){
if(sen[i] == blank[0]){
count += 1;
}
}
if(sen[0] == blank[0]){
count -= 1;
}
last = strlen(sen)-2;
if(sen[last] == blank[0]){
count -= 1;
}
printf("%d",count+1);
return 0;
}
알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.
level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다
단어의 글자수가 홀수인지 짝수인지를 구별해서 temp에 임시로 넣고 하나씩 바꿔치기하는 반복문을 만들어서 바꾼 값이 맞는가를 판단하여 잘 출력한다.
#include <stdio.h>
#include <string.h>
int main(){
char ch[102],copy[102];
int len;
scanf("%s",&ch);
len = strlen(ch);
strcpy(copy,ch);
if((len)%2 == 1){
for(int i=0;i < len/2; i++){
char temp = ch[i];
ch[i] = ch[len-1-i];
ch[len-1-i] = temp;
}
}else{
for(int i=0;i < len/2; i++){
char temp = ch[i];
ch[i] = ch[len-1-i];
ch[len-1-i] = temp;
}
}
if(strcmp(ch,copy)==0){
printf("1");
}else{
printf("0");
}
return 0;
}
N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.
2차원 배열 2개 만들고 몇행 몇열로 할지도 입력받고 몇행 몇열 입력과 input변수로 for문을 사용해 두 2차원 배열들을 채워준다 그리고 두 배열을 더해서 모양에 맞게 출력해주는 for문을 작성해주면 완성!
#include <stdio.h>
#include <string.h>
int main(){
int a,b,input=0;
int A[102][102],B[102][102];
scanf(" %d %d",&a,&b);
for(int i = 0 ; i < a; i++){
for(int j = 0 ; j < b; j++){
scanf("%d",&input);
A[i][j]=input;
}
}
for(int i = 0 ; i < a; i++){
for(int j = 0 ; j < b; j++){
scanf("%d",&input);
B[i][j]=input;
}
}
for(int i = 0 ; i < a; i++){
for(int j = 0 ; j < b; j++){
printf("%d ",A[i][j]+B[i][j]);
}
printf("\n");
}
return 0;
}
첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다.
입력횟수를 입력받고 입력횟수를 써서 반복문으로 배열에 차례대로 받아준다. 그후 간단한 for문으로 판별을위해 입력한 수와 비교해주고 카운트에 수를 더해 출력해주면 완성
문자열 공백문제코드 재탕을 시도했지만 자료가 정수형이라 장렬히 실패!(기묘한 이름의 변수들은 그 잔해들이다)
#include <stdio.h>
int main(){
int count = 0, input_times = 0,sen[1000],num = 0;
scanf("%d ",&input_times);
for(int i = 0; i<input_times;i++){
scanf("%d",&sen[i]);
}
scanf("%d",&num);
for(int i = 0; i<input_times;i++){
if(num == sen[i]){
count += 1;
}
}
printf("%d",count);
return 0;
}
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
저장소에 입력받을 횟수를 입력받아 반복문으로 입력받아 배열을 만들고 숫자의 크기를 비교해주는 for문 2개를 사용하여 완성한다
#include <stdio.h>
int main(){
long long a=0,storage[10000000],max,min;
scanf("%lld ",&a);
for(int i = 0; i<a;i++){
scanf("%lld",&storage[i]);
}
min = storage[0];
for(int i=0;i<a;i++){
if(storage[i]<min){
min = storage[i];
}
}
printf("%lld ",min);
max = storage[0];
for(int i=0;i<a;i++){
if(storage[i]>max){
max = storage[i];
}
}
printf("%lld",max);
return 0;
}
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.
도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.
공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.
공넣기를 몇번 할지와 바구니의 갯수를 입력받고 공넣기 반복을 횟수만큼 for문을써서 입력과 값 저장하는 for문을 작성한다. 그후 배열을 for문을 사용해 출력해주기만 하면된다.
#include <stdio.h>
int main(){
int storage[1000],N,M,start,end,num;
scanf("%d %d",&N,&M);
for(int i = 0; i < M;i++){
scanf("%d %d %d",&start,&end,&num);
start -= 1;
for(start;start<end;start++){
storage[start] = num;
}
}
for(int i = 0; i < N;i++){
printf("%d ",storage[i]);
}
return 0;
}
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.
교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.
배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다배열을초기화해야한다
입력을 받고 입력받은 값의 주소들의 값을 1로한다.for문으로 배열주소를 순서대로해서 작은번호부터 나오게 하고 주소의 값이 1이 아닌 주소를 출력한다
#include <stdio.h>
int main(){
int student[31] = {0}, input;
for(int i=0;i<28;i++){
scanf("%d",&input);
student[input] = 1;
}
for(int i = 1;i<=30;i++){
if(student[i] != 1){
printf("%d\n",i);
}
}
return 0;
}



