본문 바로가기

전체 글67

코드업 1026 : [기초-입출력] 시분초 입력받아 분만 출력하기 입력되는 시:분:초 에서 분만 출력해보자. #include int main() { int h, m, s; scanf("%d:%d:%d", &h, &m, &s); printf("%d", m); return 0; } 입력되는 값이 %d:%d:%d의 형태이므로 시,분,초를 각각 h,m,s에 저장한 뒤 분의 값을 가지는 m만 출력하면 된다. 2023. 6. 3.
코드업 1025 : [기초-입출력] 정수 1개 입력받아 나누어 출력하기 다섯 자리의 정수 1개를 입력받아 각 자리별로 나누어 출력한다. #include int main() { int a, b, c, d, e; scanf("%1d%1d%1d%1d%1d", &a, &b, &c, &d, &e); printf("[%d]\n", a*10000); printf("[%d]\n", b*1000); printf("[%d]\n", c*100); printf("[%d]\n", d*10); printf("[%d]\n", e); return 0; } scanf 함수의 형식 지정자에서 %d 사이에 숫자를 넣으면 그 숫자만큼 구분되어 저장된다. 이를 이용해 각 자리의 숫자를 따로 얻고 각 자릿수만큼 10을 곱하여 출력하면 된다. 다른 방법으로는 하나의 int 값으로 받은 뒤, 10의 거듭제곱으로 나누.. 2023. 6. 3.
C언어로 Single Linked List 구현하기 C언어로 Single Linked List를 구현해보자. (풀 코드는 맨 밑) C언어에서 여러 값을 저장하기 위해 주로 배열을 사용한다. 이 배열은 메모리 크기가 정해져 있어 정해진 크기보다 많은 값을 저장할 수 없다. 그러나 Single Linked List는 값의 개수와 상관없이 값을 저장할 수 있다. Single Linked List의 기본적인 구조는 다음과 같다. 값을 저장할 공간과 다음 리스트를 가르키는 포인터를 담는 공간으로 구성되어 있다. 이를 연결하면 다음과 같다. 이 Single Linked List의 3가지 기능을 구현해보자. 1. List의 끝에 원하는 데이터을 가진 리스트를 추가하기 2. 원하는 위치에 리스트 추가하기 3. 원하는 위치의 리스트를 삭제하기 먼저 리스트의 기본 형태와 .. 2023. 6. 2.
코드업 1024 : [기초-입출력] 단어 1개 입력받아 나누어 출력하기 영단어를 1개 입력받는다. 입력받은 단어의 각 문자를 한줄에 한 문자씩 분리해 출력해보자. #include int main(){ char d[30]; scanf("%s", d); for(int i=0; d[i]!='\0'; i++){ printf("\'%c\'\n",d[i]); } } 처음 보는 문법이 많지만 천천히 해석해보자. C언어에서 문자열을 저장할때 문자열의 끝을 알기 위해 \0 이라는 값을 문자열 끝에 추가한다. d라는 배열에는 30개의 char형의 값이 들어갈 수 있다. 방이 30개가 있다고 생각하자. 30개가 되는 방안에 문자를 넣을 것이고 이 방안에 있는 값을 참조할 수 있어야한다. d[방 번호] 와 같이 사용해 방 안에 있는 문자를 확인할 수 있다. 참고로 C언어에서는 방 번호는 0번 부.. 2023. 6. 2.
코드업 1023 : [기초-입출력] 실수 1개 입력받아 부분별로 출력하기 실수 1개를 입력받아 정수 부분과 실수 부분으로 나누어 출력해보자. 실수 1개가 입력된다. (단, 입력값은 절댓값이 10000을 넘지 않으며, 소수점 이하 자릿수는 최대 6자리까지이고 0이 아닌 숫자로 시작한다.) 첫 번째 줄에 정수 부분을, 두 번째 줄에 실수 부분을 출력한다. #include int main() { int a,b; scanf("%d.%d", &a, &b); printf("%d\n%d", a, b); return 0; } 실수의 형태를 생각해보면 정수.정수 의 형태로 이루어져 있다. 따라서 정수 부분을 담을 int형 변수와 실수 부분을 담을 int형 변수를 만들면 된다. 이후 정수부분과 실수부분을 출력하면된다. 2023. 6. 1.
코드업 1022 : [기초-입출력] 문장 1개 입력받아 그대로 출력하기 공백 문자가 포함되어 있는 문장을 입력받고 그대로 출력해보자. 공백이 포함되어 있는 한 문장이 입력된다. 단, 입력되는 문장은 여러 개의 단어로 구성되고, 엔터로 끝나며, 최대 길이는 2000 문자를 넘지 않는다. #include int main(){ char data[2001]; fgets(data, 2000, stdin); printf("%s", data); return 0; } scanf의 경우 문자열의 끝을 공백이나 엔터(개행)로 인지하기에 띄어쓰기가 있는 문자열을 입력받을 때 문제가 생긴다. 그러나 fgets 함수를 사용하면 공백이 포함된 문자열을 받아올 수 있다. 엔터(개행)이 입력되면 입력이 멈춘다. fgets함수에 대해 쉽게 설명하면 fgets(저장할 배열의 주소, 값의 최대 개수, 값을 .. 2023. 6. 1.
코드업 1021 : [기초-입출력] 단어 1개 입력받아 그대로 출력하기 1개의 단어를 입력받아 그대로 출력해보자. 한 단어가 입력된다.(단, 단어의 길이는 50자 이하이다.) 입력된 단어를 그대로 출력한다. #include int main() { char chr[51]; scanf("%s", chr); printf("%s", chr); return 0; } 자료형 변수이름[크기] 와 같은 형태로 배열을 선언할 수 있다. 최대 50자의 단어인데 char chr[51]을 한 이유는 문자열의 끝을 표시하는 \0을 추가해줘야 하기 때문이다. 2023. 6. 1.
코드업 1020 : [기초-입출력] 주민번호 입력받아 형태 바꿔 출력하기 주민번호는 다음과 같이 구성된다. XXXXXX-XXXXXXX 앞의 6자리는 생년월일(yymmdd)이고 뒤 7자리는 성별, 지역, 오류검출코드이다. 주민번호를 입력받아 형태를 바꿔 출력해보자. 주민번호 앞 6자리와 뒷 7자리가 '-'로 구분되어 입력된다. '-'를 제외한 주민번호 13자리를 모두 붙여 출력한다. #include int main() { int a, b; scanf("%d-%d", &a, &b); printf("%06d%07d", a, b); return 0; } 입력 받는 값의 형태는 %d-%d의 형태를 띠고 있다. 출력하는 형태는 6자리의 정수-7자리의 정수이다. 만약 a에 입력 값 0123456 하면 앞의 0이 출력할 때 사라질 수 있다. 따라서 %06d와 %07d를 사용해야한다. 2023. 6. 1.
코드업 1019 : [기초-입출력] 연월일 입력받아 그대로 출력하기 년, 월, 일을 입력받아 지정된 형식으로 출력해보자. 년, 월, 일이 "."으로 구분되어 입력된다. 입력받은 연, 월, 일을 yyyy.mm.dd 형식으로 출력한다. #include int main() { int y, m, d; scanf("%d.%d.%d", &y, &m, &d); printf("%04d.%02d.%02d", y, m, d); return 0; } %04d를 사용하면 4칸을 사용하여 출력을 한다. 만약 출력 값이 20이면 0020으로 출력한다. 위 문제에서 2004년 2월 11일을 출력한다고 했을때, printf("%d.%d.%d", y, m, d); 를 사용하면 2004.2.11로 출력된다. 원하는 출력값은 2004.02.11이 되어야 하므로 printf("%04d.%02d.%02d",.. 2023. 6. 1.
728x90