티스토리 뷰

4. C언어: 2023에서 4의 배수 개수 구하기

 
#include
int main(){
int c=0;
for(int i=1; i<=2023; i++) {
if(i%4 == 0) c++;
}
printf("%d", c);
}
- 답안: 505
  • if(i%4 == 0) c++ 라고 되어있고 int c = 0; 으로 초기화되어있기 때문에 if절에서 말하는 바를 파악하면 쉽게 문제를 풀 수 있다. 2023까지의 수에서 4의 배수를 찾는 문제 => 즉, 2023 을 4로 나눈 몫의 값이 c가 된다. 

9. C언어: 54321 -> 43215 로 구현 - printf("%d", ( 여기! ));
#include
int main() {
int n[5] = {5, 4, 3, 2, 1};
for(int i=0; i<5; i++) {
printf("%d ", n[(i+1)%5]);
	}
}

- 답안 : n[(i+1)%5]
 
 

10. C언어: switch문
#include
int main(){
int n[3] = {73, 95, 82};
int sum = 0;
for (int i=0; i<3; i++){
sum += n[i];
}
switch(sum/30){
case 10:
case 9: printf("A");
case 8: printf("B");
case 7:
case 6: printf("C");
default: printf("D");
	}
}

- 답안: BCD
 
  • 여기서 중요한 것은 sum 이 250이고 나누기 30 하면 8이네? 하고 case 8의 B만 답으로 쓰면 틀린다는 소리 
  •  switch ~ case 문의 break문이 없으면 아래의 코드가 있을 경우, 전부 실행한다. 
  • 그래서 답은 BDC가 된다. => printf니까 연달아 써주면 된다. 낚시형 문제로 많이 나온다니 주의할 필요가 있을 듯 

12. C언어: 문자열 포인터

[입력] 홍길동 → 김철수 → 박영희
#include <stdio.h>
char n[30];
char* getname(){
    printf("입력:");
    gets(n);
    return n;
}
int main() {
    char* n1 = getname();
    char* n2 = getname();
    char* n3 = getname();
    printf("%s\n",n1);
    printf("%s\n ",n2);
    printf("%s ",n3);
    return 0;
}
- 답안:
박영희
박영희
박영희
  • gets는 c언어에서 입력을 받는 메서드이다.  => old하고 현재는 컴파일하려면 에러가 나는 메서드이긴함..
  • scanf - printf , gets - puts 이렇게 쌍으로 이루어진 입출력 함수라고 생각하면 된다. 
  • 이해하지 못하더라도 대충 입력값으로 변수n을 받는다는 것이며 이 문자열 n을 return 한다. 
  • n1, n2, n3 변수는 char*로 포인터 변수로 선언돼있음을 알 수 있다. 
  • 포인트는 char n[30] 이 전역 변수로 선언되어있는 것이 중요하고 getname함수가 char* 이라는 포인터 함수이라는 것? 그렇다면 getname 이 갖고 있는 것은 값이 아니라 주소! 결국 가장 마지막에 호출되는 n을 가리키게 되어있다. 
  • 마지막 입력값으로 들어온 것은 박영희이므로 답안이 위와 같이 되는 것
  • 값을 가리키는 것은 &n , n1, n2, n3은 포인터(메모리 주소를 가리키는 것)

13. C언어 - 4620원의 1000원 ,500원,100원 10원 개수 구하기
m = 4620, a = 1000원 개수, b = 500원 개수, c = 100원 개수, d = 10원 개수
a, b, c, d 에 들어갈 코드 순서대로 작성
조건: m, i, d, %, /, 0~9, ( ) 만 사용
<보기>를 주고 최소로 사용할 것

아래의 코드에서 a,b,c,d는 원래 비어있음

#include <stdio.h>

int main() {
int m = 4620;
int a, b, c, d; 
a = m / 1000;
b = (m%1000) / 500;
c = (m%500) / 100;
d = (m%100) / 10;
printf("1000원 개수:%d ", a);
printf("500원 개수:%d ", b);
printf("100원 개수:%d ", c);
printf("10원 개수:%d ", d);
}

- 답안:
m / 1000
(m % 1000) / 500
(m % 500) / 100
(m % 100) / 10
  • 키 포인트는 %(나머지연산자, mod)를 잘 사용하는 것 
  • / (나누기 연산자)는 정수인 "몫"을 return 하지만 %(나머지 연산자)는 정수인 "나머지"를 return한다. 
  • 그렇다면 a는 1000원의 개수인 정수, b는 500원의 개수, c는 100원의 개수, d는 10원의 개수를 출력하도록 식을 쓰면 된다. 
  • 4620를 최소로 연산해서 쪼개려면 4/1/1/2 의 값이 되도록 연산하면 된다. 
  • 중요한 것은 위에서 쪼개고 남은 나머지를 다음 식에서 가져와야 한다는 것
  • (m%1000) / 500 에서 소괄호에 해당하는 부분이 바로 나머지 620 이다. 620을 500으로 나눠주면 1이기 때문에 이런식으로 식을 짜주면 된다. 
  • 중요한 것은 10 -> 100 -> 500 -> 1000이 배수관계이기 때문에  (m%1000%500)  /100 이런식으로 전부 써주는 것이 아니라 그냥 (m % 500) / 100 을 해서 최소로 보기에 있는 수식을 써줘야 한다는 점이다. 

11. C언어: stack 

#include
#define MAX_SIZE 10
int isWhat[MAX_SIZE];
int point= -1;
int isEmpty() {
    if (point == -1) return 1;
    return 0;
}
int isFull() {
    if (point == 10) return 1;
    return 0;
}
void into(int num) {
    if (point >= 10)
    printf("Full");
    isWhat[++point] = num;
}
int take() {
    if (isEmpty() == 1) printf("Empty");
    return isWhat[point--];
}
int main(int argc, char const *argv[]){
    int e;
    into(5); into(2);
    while(!isEmpty()){
        printf("%d", take());
        into(4); 
		into(1); printf("%d", take());
        into(3); printf("%d", take()); printf("%d", take());
        into(6); printf("%d", take()); printf("%d", take());
    }
}
- 답안: 213465
  • 이 문제는 stack을 모르더라도 순서를 따라가면서 isWhat[] 배열을 만들고 원소를 뽑고 쓰고하면 충분히 해결할 수 있는 문제라고 함
  • 물론 난 차근차근하지못하고 당황하다가 틀렸을 거 같음..

14. C언어: 선택 정렬(오름차순) - if(E[i] ( 부등호) E[j] ) 

정렬 문제 나왔는데 => 이건 부등호 문제로 앞의 값이 더 큰 값인지 뒤의 값이 더 큰 값인지 부등호 넣는 것

무슨 정렬인 지 알지 못해도 대충 감으로 기존 배열의 원소가 어떤식으로 sort하려는 지 알면 1/2확률로 맞추기 가능


+

SQL 문제 

학생 테이블이 있으며 이미 생성되었다고 가정한다. 
컬럼은 학번, 이름, 학년, 과목명, 전화번호가 있으며 해당 컬러메 다음 데이터를 넣어라
(단, 필요한 경우 싱글쿼트(작은따옴표) 만 사용한다.)

테이터 타입
학번: number
이름: char
학년: number 
과목명: char
전화번호: char

학번: 98001234
이름: 한국산
학년: 3
과목명: 경영학개론 
전화번호: 050-1234-1234

아래는 답안에 쓰일 SQL 공식

INSERT INTO 테이블 VALUES (data pairs)
- 답안: INSERT INTO 학생 VALUES(98170823, ‘한국산’, 3, ‘경영학개론’, ‘050-1234-1234’);
OR 
INSERT INTO 학생(학번, 이름, 학년, 전공, 번호) VALUES(98170823, ‘한국산’, 3, ‘경영학개론’, ‘050-1234-1234’);
- 출제: [SQL02 – 2.DML]
- 기타: 2017년 1회 기출문제, 작은 따옴표('')를 사용하여 작성

*SQL은 기출만 잘 돌리면 맞을 거 같다.

 


참고 자료: 

 

[2023년 2회] 정보처리기사 실기 복원 문제 - goodday-developer

안녕하세요. 2023년 2회 정보처리기사 실기 기출문제를 정리해보았습니다.

goodday-developer.com

 
 
댓글