티스토리 뷰
문제 |
효민이는 선린고를 졸업하고 CISCO에 입사하기 위하여 CISCO면접을 보았다. 효민이는 CISCO 면접 시험을 푸는 중이다. 네트워크에서 서브넷 마스크를 ex) 255.255.255.0 -> 11111111.11111111.11111111.0 -> /24(이진수에서 1의 개수가 24(8+8+8개) 이런 식으로 줄여 표기하기도 하는데, 시험 문제에서는 255.255.255.0이 아닌 /24로 표기되어 있다고 한다. 효민이는 프로그래밍의 신이라 이 문제를 노트북을 키고 C언어로 쉽게 구현하려 한다. 만약 이 문제를 푼다면 효민이는 CISCO에 취직을 할 수 있다고 한다. 구현해보자.
|
입력 |
X를 입력 받는다. X는 0<=X<=32
|
출력 |
/X의 서브넷 마스크를 출력 |
입/출력 예시 1
입력1 |
24
|
출력1 |
입/출력 예시 2
입력2 |
30
|
출력2 |
코드
#include <stdio.h>
/*
made by hyomin
*/
int twoConvertTen(int num);
int main(){
int x; //입력
int a,b,c,d; //서브넷 마스크 a.b.c.d
int binary=1;
int i = 0;
int ten;
a=0;
b=0;
c=0;
d=0;
scanf("%d", &x);
if(x>=8){//x가 8일시 11111111.0.0.0 이므로 255.0.0.0, 1<=x<8이라면 else문으로 들어감.
a = 255;
if(x>=16){//x가 16일시 11111111.11111111.0.0 이므로 255.255.0.0, 8<x<16이라면 else문으로 들어감.
b=255;
if(x>=24){//x가 24일시 11111111.11111111.11111111.0 이므로 255.255.255.0, 16<x<24이라면 else문으로 들어감.
c=255;
if(x>=32){//x가 32일시 11111111.11111111.11111111.11111111 이므로 255.255.255.255, 24<x<32이라면 else문으로 들어감.
d=255;
}
else if(x != 24){
x = x-24;
for(i=1;i<x;i++){
binary = binary*10+1;
}
for(i=0;i<8-x;i++){
binary = binary *10;
}
ten = twoConvertTen(binary);
d = ten;
binary = 1;
}
}
else if(x != 16){
x = x-16;
for(i=1;i<x;i++){
binary = binary*10+1;
}
for(i=0;i<8-x;i++){
binary = binary *10;
}
ten = twoConvertTen(binary);
c = ten;
binary = 1;
}
}
else if(x != 8){
x = x-8;
for(i=1;i<x;i++){
binary = binary*10+1;
}
for(i=0;i<8-x;i++){
binary = binary *10;
}
ten = twoConvertTen(binary);
b = ten;
binary = 1;
}
}
else{// 바이너리 -> 십진수
for(i=1;i<x;i++){
binary = binary*10+1; // 이 계산을 해주면 만약 x가 7이면 1111111이 됌.
}
for(i=0;i<8-x;i++){
binary = binary *10; // 이 계산을 해주면 만약 x가 7이면 11111110이 됌.
}
ten = twoConvertTen(binary); // 십진수 변환 함수 호출.
a = ten;
binary = 1; //변수 값 초기화
}
printf("%d.%d.%d.%d", a, b,c,d);//최종 출 력
return 0;
}
int twoConvertTen(int num){//2진수 -> 10진수 변환 함수.
int result = 0;
int mul = 1;
while(num>0){
if(num%2){
result += mul;
}
mul *= 2;
num /=10;
}
return result;
}
출제의도
- 네트워크와 같은 많은 it분야에서 프로그래밍이 많이 쓰인다. 이 문제는 간단한 이진수->10진수 문제가 아니라 a.b.c.d 각 부분에 대하여 십진수 변환을 해줘야 하므로 머리가 아프다. 십진수 변환 알고리즘도 알아야 한다. 항상 프로그래밍 문제를 풀다보면 실용적인 면보다 수학적인 면이 더 높다. 이 문제는 실제로도 많이 쓰이는 곳인 네트워크라는 컨셉을 사용하여 컴퓨터 입문자들에게 흥미로운 프로그래밍을 할 수 있도록 도와준다.
'programming > c, c++' 카테고리의 다른 글
[C언어]프로그래밍 문제만들기 1 - 문자열 피라미드 (0) | 2017.12.16 |
---|---|
[C언어]컴파일러의 실행 단계 (0) | 2017.12.16 |
[C언어]고급언어와 저급언어(기계어, 어셈블리어) (0) | 2017.12.16 |
[C언어]전처리기의 특징, 헤더 파일 (0) | 2017.12.16 |
[C언어 프로젝트]효민타자연습기 (0) | 2017.12.15 |
- exit
- SQLi
- fastbindup
- 해킹
- pwable
- fsop
- 본선가고싶다
- TLS
- pwnable.tw
- HackCTF
- fastbin
- heap
- hacking
- oob
- codegate
- FSB
- ebp change
- stack reusing
- glibc
- shellcoding
- tcache
- overflow
- pwnable
- rt_sigreturn
- srop
- Total
- Today
- Yesterday