일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- GROUP BY
- 에라토스테네스의 체
- 트리
- MST
- DFS
- 우선순위큐
- 서브쿼리
- 다이나믹 프로그래밍
- 다이나믹프로그래밍
- 크루스칼
- 시뮬레이션
- join
- 그래프 탐색
- 그리디
- 백트래킹
- 재귀
- 플로이드-워셜
- 수학
- 다시
- BFS
- 구현
- 그래프 이론
- DP
- 누적합
- 다익스트라
- 해시
- 투포인터
- 분할정복
- 브루트포스
- 자료구조
- Today
- Total
기록하고 까먹지 말기
Mid Coding Test 본문
이번 중간고사때 있었던 코딩테스트다
중간고사이기도 하고 개념이 쉬운 개념만 나왔기 때문에 문제는 전반적으로 어렵지는 않았다.
제한시간도 1시간밖에 되지 않았고 다 푸니까 30분정도 남았어서 지루하게 기다렸던 기억이 있다.
#include <stdio.h>
int main(){
int time = 0; // input seconds from user
int h, m, s; // declaring variables
printf("Q) seconds? "); // asking and enter a time
scanf("%d", &time);
// calculating hour, minute and seconds
h = time / 3600;
time %= 3600;
m = time / 60;
time %= 60;
s = time;
// printing outputs
printf("A) %d hours %d minutes %d seconds", h, m, s);
return 0;
}
먼저 첫 번째 문제다.
variable 챕터에 있는 것처럼 time을 입력받은 후 시, 분, 초 단위로 나누어 출력하는 문제다.
div와 mod를 적절히 사용한다면 간단하게 해결 가능하다.
#include <stdio.h>
int main(){
int n; // declaring variable
printf("Q) number? ");
scanf("%d", &n); // entering number from user
//printinf outputs
printf("A)\n");
printf("decimal number: %d\n", n); // printing in decimal
printf("octal humber: %o\n", n); // printing in octal
printf("hexadecimal number: %x", n); // printing in hexadecimal
return 0;
}
두 번째 문제다. 수를 입력받고 2진수, 8진수, 16진수를 출력하는 문제다.
각 진수별 출력방식만 알고 있으면 쉽게 해결 가능하다.
#include <stdio.h>
int main(){
int n1, n2; // declaring 2 numbers
char op; // deslaring operator
// entering n1, n2, and operator from user
printf("Q) num1 operator num2? ");
scanf("%d %c %d", &n1, &op, &n2);
// printing outputs
// devide cases between entered operator(charactor)
switch(op){
case '+': // addition case
printf("A) %d", n1+n2);
break;
case '-': // subtraction case
printf("A) %d", n1-n2);
break;
case '*': // multiplication case
printf("A) %d", n1*n2);
break;
case '/': // division case
if(n2 == 0){ // if dividing with 0
printf("num2 error!"); // printing error
break;
}
printf("A) %d...%d", n1/n2, n1%n2); // printing division and rests
break;
default : // etc case
printf("operator error!");
}
return 0;
}
세 번째 문제다.
숫자 연산자 숫자를 차례대로 입력받고 연산자에 따라 계산을 하는, 즉 계산기를 만드는 프로그램이다.
연산자에 기반하여 switch문을 만들고 거기에 default문을 넣어 operator error까지 넣으면 끝.
#include <stdio.h>
void Check(int n){ // declaring function check if it is a leap year
if((n % 4 == 0) && (n % 100 != 0)) // multiple of 4 and not multiple of 100 -> leap year
printf("A Leap year"); // printing output
else if((n % 400) == 0) // multiple of 400 -> leap year
printf("A Leap year"); // printing output
else // etc -> not leap year
printf("Not a leap year"); // printing output
return;
}
int main(){
int y; // declare year
printf("year? ");
scanf("%d", &y); // inputs year from user
// check if entered year is positive, and under 10000
if(y < 0 || y >= 10000){
printf("year error");
return 0;
}
Check(y); // send value to function as parameter
return 0;
}
윤년을 판별하는 문제다.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. (출처 : 위키피디아)
윤년 판독을 위한 함수를 만들고 그 안에 if~else문을 사용하여 아웃풋을 출력하는 방식으로 해결했다.
또한 지정된 범위가 아닌 수를 입력받은 경우 프로그램을 종료하는 조건이 있었기 때문에 입력받은 이후 원하는 범위가 아닐 경우 return 0;을 통해 프로그램을 종료하도록 만들었다.
#include <stdio.h>
void CheckPalindrome(int n){ // declaring function checking it parameter is palindrome number
int comp = 0; // comp : comparing number with parameter
int temp = n; // temporary number
while(temp > 0){
comp += temp % 10; // adding modular of temp to comp
comp *= 10; // multiply 10 to comp
temp /= 10; // divide 10 to temp
}
comp /= 10; // after exit while loop, dividing 10
// comparing comp and parameter
if(n == comp) // if same
printf("A palindrome number"); // printing output
else // if not
printf("Not a palindrome number."); // printin output
return ;
}
int main(){
int num=0; // declaring variable
printf("Palindrome number? ");
scanf("%d", &num); // enter a number from user
// check if entered number is positive number
if(num <= 0){
printf("Entered number is not positive number!");
return 0; // if not, quit program
}
CheckPalindrome(num); // send value to function checking if number is palindrome number
return 0;
}
수를 입력받은 후 그 수가 Palindrome number인지 판별하는 문제이다.
Palindrome number는 각 수의 자리수를 비교했을 때 정확히 대칭인 수이다.
예를 들어 12345의 경우 1 과 5, 2와 4를 비교했을 때 서로 다르기 때문에 12345는 Palindrome number가 아니라고 할 수 있다. 만면, 12321의 경우 첫 번째와 다섯번째 자리의 경우 모두 1, 두 번째와 네 번째 자리의 경우 모두 2이기 때문에 12321은 Palindrome number라고 할 수 있다.
문제를 풀기 위해 먼저 입력받은 수가 양수인지 판별하였다.
그리고 그 수를 Palindrome number 여부를 체크하기 위해 이를 위한 함수로 값을 보냈다.
CheckPalindrome 함수에서는 비교 목적의 변수인 comp를 초기화하여 인자인 n의 자릿수에서 역순으로 만드는 방식으로 while문을 만듦으로써 비교 대상을 만들었다. 즉, 12345인 경우 comp는 54321인 형식으로 구현, n과 comp가 최종적으로 동일한 경우 palindrome number라는 결론이 나타나도록 만든 것이다.
때문에 서로 동일 한 경우와 동일하지 않은 경우를 if~else문을 통해 결과를 출력하였다.
이번 코딩테스트는 위에 있던 것처럼 배운 개념이 어렵지 않았기 때문에 과제를 스스로 풀었다면 큰 어려움은 없었을 것이라고 생각한다.
이 코드를 마음대로 긁어가서 사용하는것은 상관 없지만.... 이걸 본다면 다른 사람들도 본다는 것이기 때문에 적당히 참고용으로만 사용하기를 바란다.
'전공 > C' 카테고리의 다른 글
과제8 - Pointer_Array (1 ~ 5) (0) | 2021.06.22 |
---|---|
과제7 - Array (1 ~ 4) (0) | 2021.06.22 |
과제 6 - Function (6 ~ 9) (0) | 2021.06.22 |
과제 6 - Function (1 ~ 5) (0) | 2021.06.21 |
과제 5 - Control Flow 2 (6 ~ 9) (0) | 2021.06.21 |