반응형

# 정보처리기사 손코딩 문제

# C언어

## C언어 소스 코드, 홀수와 짝수를 출력하는 코드, 밑줄에 들어갈 조건문은?

#include <stdio.h>

void main() {
  int a = 10;

  if ( __________ ) 
    printf("짝수\n");
  else
    printf("홀수\n");
}


정답 
a % 2 == 0

## C언어 소스 코드, 출력 결과

#include <stdio.h>

void main() {
  
  int a = 5;
  
  printf("a:%d\n", a);

}


정답
a:5

## C언어 소스 코드, 출력 결과

#include <stdio.h>

void main() {
  
  int a = 100;

  char c = 'Z';

  switch(a/10) {
    case 10:
    case 9: c='A'; break;
    case 8: c='B'; break;
    default: c='F';
  }

  printf("%c\n", c);

}


정답
A

## C언어 소스 코드, 출력 결과

#include <stdio.h>

void main() {
  
  int i, j;

  int temp;

  int a[5] = {14, 22, 53, 45, 1};

  for ( i = 0; i < 4; i++ ) {
    for ( j = 0; j < 4-i; j++ ) {
      if ( a[j] > a[j+1] ) {
        temp = a[j];
        a[j] = a[j+1];
        a[j+1] = temp;
      }
    }
  }

  for ( i = 0; i < 3; i++ ) {
    printf("%d\n", a[i]);
  }

}


정답
1
14
22

=> 버블정렬 : 인정한 두 원소 검사하여 정렬하는 것
버블정렬로 인해 for문을 돌면 앞에 값과 비교하여 큰 값이 뒤로 가지므로,
a[5] = {1, 14, 22, 45, 53}; 으로 정렬된다.

## C언어 소스 코드, 출력 결과

#include <stdio.h>

void main() {
  
  int a = 0, b = 1;

  printf("%d\n", a&&b);
  printf("%d\n", a||b);

}


정답
0
1

=> 
C언어는 블린(Boolean)타입이 없음
(1과 0로 참, 거짓 판별)
(참은 1 / 거짓은 0)

&& : 둘 다 1일 경우 1, 아니면 0
|| : 둘 중 하나라도 1일 경우 1

## C언어 소스 코드, 출력 결과

#include <stdio.h>

void main() {
  
  int ret = 4;

  switch(++ret) {
    case 5: ret += 2;
    case 3: ret ++; break;
    case 4: ret++;
    default: ret*=2;
  }

  printf("%d\n", ret);

}


정답
8

## C언어 소스 코드, 출력 결과

#include <stdio.h>

int f (int i);

void main() {
  
  printf("%d %d %d", f(1), f(5), f(-2));
  
}

int f (int i) {
  if ( i <= 2 ) 
    return 1;
  else 
    return f(i-1) + f(i-2);
}


정답
1 5 1

=> 
재귀함수 : 자기가 자기 자신을 부르는 함수

f(1) = 1

f(5) = f(4) + f(3)
f(4) = f(3) + f(2) = f(2) + f(1) + 1 = 3
f(3) = f(2) + f(1) = 2
f(5) = 5

f(-2) = 1

## C언어 소스 코드, 출력 결과

#include <stdio.h>

int hrd (int n) {
  if ( n <= 0 )
    return 1;
  else
    printf("%d ", n);
  hrd(n-1);
}

int main() {
  
  hrd(5);
  
  return 0;
}


정답
5 4 3 2 1

=>
재귀함수

hrd(5) = 5 hrd(4)
hrd(4) = 4 hrd(3)
hrd(3) = 3 hrd(2)
hrd(2) = 2 hrd(1)
hrd(1) = 1 hrd(0)
hrd(0) = return 1; return 값이므로 출력x

## C언어 소스 코드, 출력 결과

#include <stdio.h>

int num (int a, int b) {
  if ( a > b )
    return a;
  else
    return b;
}

void main() {
  
  printf("%d\n", num(10,20) + num(30,20));

}


정답
50

=>
a > b : return a;
a < b : return b;

num(10,20) : 20
num(30,20) : 30

20 + 30 = 50

## C언어 소스 코드, 출력 결과

#include <stdio.h>

void main() {
  int a = 3, b = 4;
  int ret = 0;
  ret = a > b ? a : b;

  switch(ret) {
    case 0: printf("A");
    case 4: printf("B");
    case 3: printf("C");
    case 7: printf("D");
    default: printf("E");
  }

}


정답
BCDE

=> 
삼항연산자 
조건 ? 조건이 참일 때 값 : 조건이 거짓일 때 값

a > b 조건 ? 참일 떄 a : 거짓일 때 b;
ret = 4;
break 없으므로 case 4 부터 전체 실행

## C언어 소스 코드, 출력 결과

#include <stdio.h>

void main() {
  int i = 1;

  for ( ; i < 10 ; ) {
    switch (i % 2) {
      case 0: printf("짝수 : %d\n", i); break;
      default: printf("홀수 : %d\n", i);
    }
    i += 3;
  }

}


정답
홀수 : 1
짝수 : 4
홀수 : 7

=>
default 는 if문의 else와 비슷한 역할 
(위 case가 다 아닐 경우 실행, break가 없으면 default까지 실행된다.)

int i = 1; 초깃값
i += 3 증감 값을 의미

i = 1 
1 % 2 != 0
홀수 : 1
i = 1 + 3 = 4;

i = 4
4 % 2 == 0
짝수 : 4
i = 4 + 3 = 7;

i = 7
7 % 2 != 0
홀수 : 7
i = 7 + 3 = 10;

조건 i < 10에 해당하지 않음.

## C언어 소스 코드, 결과 출력

#include <stdio.h> 
int main() 
{ 
    int a = 10; 
    int *p = &a; 
    printf("%d %d\n", a, *p); 

    a = 30; 
    printf("%d %d\n", a, *p); 

    return 0; 
}


정답
10 10
30 30

=> 
포인트
int *p 는 포인터, 
int *p = &a 는 a의 주소 값을 갖고 있는 것.

a = 10;
*p = &a = 10;
10 10

a = 30;
*p = 30;
30 30

## C언어 소스 코드, 결과 출력

#include <stdio.h> 
int main() 
{ 
    int x = 7;
    int y = 7;
    
    int a = ++x + y--;
    
    printf("%d\n", a);
}


정답
15

=>
++x : 8 ( 변수 값 증가 후 값을 사용 )
--y : 7 ( 값을 사용 후 변수 값 감소)

## C언어 소스 코드, 출력 결과

#include <stdio.h>

void main( ){
  int a = 5;
  int s = 0;

  switch(a/2){
  case 2 : s++;
  case 3 : a += s;
  default : a++;
  }
  
  printf("%d %d", s, a);
}

정답
1 7

=>
a/2 = 2.5 로 2
case 2일때 s++ 로 인해서 s = 1
break가 없으므로 나머지도 실행.
case 3일때 a += s 이므로 a = a + 1, a = 6
defalut a++ 이므로 a = 7

1 7

## C언어 소스 코드, 출력 결과

void main(){
 int a[5] = {2, 4, 1, 3, 0};
 printf("%d %d", a[a[4]], a[3]+a[1]);
}

정답
2 7

=>
a[4] = 0
a[a[4]] = a[0] = 2

a[3] = 3
a[1] = 4
a[3] + a[1] = 3 + 4 = 7

2 7

 

# 자바

## 자바 소스 코드, 출력 결과

class Main {
  public static void main(String[] args) {
    
    int a = 10;
    int b = 20;

    System.out.println(++a);
    System.out.println(b--);

  }
}


정답
11
20

=> 
++a 변수의 값을 증가 후, 변수 값 사용
b-- 변수 값 사용 후, 변수의 값을 감소

a = 10;
++a = 11;
11

b = 20;
20
b-- = 19;

## 자바 소스 코드, 출력 결과

class Main {
  public static void main(String[] args) {
    
    int x = 3;
    System.out.println(++x);
    System.out.println(x++);

  }
}

정답
4
4

=>
++x : 변수의 값을 증가 후, 변수 값 사용
x++ : 변수 값 사용 후 변수의 값을 증가

위 코드는 동일한 변수 x를 사용

x = 3;
++x = 4;
4

x = 4;
4
x++ = 5;

## 자바 소스 코드, 출력 결과 (implements)

interface ICar { // 인터페이스를 선언 
    void move(); // 구현체 없이 선언만 존재 
}

class ConCar ( ____________ ) ICar { 
    public void move() { 
        System.out.println("이동합니다"); // "이동합니다"를 출력 
    } 
}

class Main { 
    public static void main(String args[]) { 
        ICar car = new ConCar(); // 구현클래스 객체 생성 
        car.move(); // ConCar 클래스의 move 호출 
    } 
}


정답
implements
결과 출력 : 이동합니다.

=>
인터페이스를 선언한다.
구현몸체는 없이 선언만 존재한다.
interface 나오면 implements

## 자바 소스 코드, 출력 결과

public class ExamSample { 
    void func() { 
        System.out.println("매개변수 없음"); // "매개변수 없음"을 출력한다. 
    } 
    void func(int i) { 
        System.out.println( i ); // i 값을 출력한다. 
    } 
    void func(int i, int j) { 
        int k = i + j; // i와 j를 더한값을 k에 저장한다. 
        System.out.println( k ); // k를 출력한다. 
    } 
}


public class Main { 
    public static void main(String args[]) { 
        ExamSample es = new ExamSample(); // Exam 객체를 생성한다. 
        es.func(2, 3); // 매개변수가 2개인 메소드를 호출한다. 
    } 
}

( _____ )은/는 동일 이름의 메소드를 여러개 정의할 수 있는 특성이다. 


정답
오버로딩


=>
오버로딩 : 메소드명 동일, 매개변수, 리턴타입은 다를 수 있다. ( 동일한 메소드를 여러개 정의할 수 있는 특성)
오버 라이딩 : 메소드명, 매개변수, 리턴타입 동일, 상속받아서 사용.

## 자바 소스 코드, 물음에 답하시오.

class A{
  public void fn(){}
}

class B ( ① ) A{ // B는 A를 상속받음
  public void fn(){}
}

...(생략)...


(1) 위의 코드에서 ①에 들어가는 키워드는 무엇인가?
(2) 위의 코드의 fn처럼 하위 클래스에서 상위 클래스 메서드를 재정의 할 수 있는 기능을 무엇이라고 하는가?

정답
(1) extends
(2) 오버라이딩

 

# C++

## C++ 소스 코드, 출력 결과

#include <iostream>

void main() {
  
  int score = 95;

  switch(score/10) {
    case 10: std::cout << "수";
    case 9: std::cout << "수";
    case 8: std::cout << "우";
    case 7: std::cout << "미";
    case 6: std::cout << "양";
    default: std::cout << "가";
  }

}

정답
수우미양가

=>
break가 없으므로 해당하는 케이스부터 전체 실행

95/10 = 9 (실수형 아니므로.)

break 없으므로 수우미양가

## C++ 소스 코드, 출력 결과

#include <iostream>

void main() {
  
  int s = 0;

  int i;

  for ( i = 1; i <= 10; i++ ) {
    if ( i == 2 )
      continue;
    else if ( i == 4 )
      break;
    s += i;
  }

  std::cout << i << " " << s;

}


정답
4 4

=> 
띄어쓰기 : (" ")
개행 : std::cout << std::endl;

continue : 아래 조건 실행하지 않고 반복문으로 돌아감.

i = 1;
if문 x 
s = 1;

i = 2;
2 == 2;
continue; 반복문으로 돌아감

i = 3;
if문 x
s = 1 + 3 = 4;

i = 4;
4 == 4;
break;

4 4

## C++ 소스 코드, 출력 결과

#include <iostream>

int fn(int n) {
  if  ( n <= 1 )
    return 1;
  else
    return n*fn(n-1);
}

void main() {
  std::cout << fn(4);
}


정답
24

=> 재귀함수 : 자기가 자기 자신을 부르는 함수

fn(4) = 4*fn(3)
fn(3) = 3*fn(2)
fn(2) = 2*fn(1)
fn(1) = return 1;

fn(4) = 4*3*2 = 24

## C++ 소스 코드, 출력 결과

#include <iostream>
using namespace std;

void main() {
  
  int a[5] = {1, 2};
  int s = 0;

  for ( int i = 2; i < 4; i++ ) {
    s+=a[i];
  }
  cout << s;
}


정답
0

=>
using namespace std; 은 컴파일러에 "std 네임스페이스의 모든 것을 사용하고 싶다"고 말하므로 
컴파일러가 인식하지 못하는 이름을 찾으면 std 네임스페이스를 검사한다.
따라서 컴파일러가 "cout"(인식할 수 없는)을 발견하면 std 네임스페이스에서 찾는다

a[5] = {1, 2}; 나머지 공간 0으로 초기화
a[5] = {1, 2, 0, 0, 0} 

i = 2;
s = 0 + a[2] = 0 + 0 = 0;

i = 3;
s = 0 + a[3] = 0 + 0 = 0;

## C++ 소스 코드, 출력 결과

#include <iostream>
using namespace std;

int main() {
  
  int arr[2][2];
  int count = 0;
  
  for ( int i = 0; i < 2; i++ ) {
    for ( int j = 0; j < 2; j++ ) {
      arr[i][j] = ++count;
    }
  }

  for ( int i = 0; i < 2; i++ ) {
    for ( int j = 0; j < 2; j++ ) {
      std::cout << arr[j][i] << " ";
    }
  }

}


정답
1 3 2 4

=>

arr[0][0];
++count;
count = 1;
arr[0][0] = 1;

arr[0][1];
++count;
count = 2;
arr[0][1] = 2;

arr[1][0];
++count;
count = 3;
arr[1][0] = 3;

arr[1][1];
++count;
count = 4;
arr[1][1] = 4;

arr = {{1,2}, {3,4}};

std::count << arr[j][i] << " "
2중 for문
for문 i = 0 1
for문 j = 0 1
arr[0][0] = 1;
arr[1][0] = 3;
arr[0][1] = 2;
arr[1][1] = 4;

## C++ 소스 코드, 짝수 이면서 10보다 큰 수가 입력되면 Here 출력되도록 코드 입력

#include <iostream>
using namespace std;

int main() {
  
  int a;
  
  scanf("%d", &a);

  if ( ________________ )
    printf("Here");
}


정답
a % 2 == 0 && a > 10

=>
scanf 입력받는 것
scanf("%d", &a)
형식 지정자
%d : 정수
%f : 실수
%lf : double 실수
%c : 문자

&a 는 입력받은 값을 저장할 공간

## C++ 소스 코드, 출력 결과

#include <iostream>
#define ROW 3
#define COL 2

int main() {
  
  int i, j;
  int a[ROW][COL] = {{1, 2}, {3, 4}, {5, 6}};
  int sum = 0;

  for ( i = 0; i < ROW; i++ ) {
    for ( j = 0; j < COL; j++ ) {
      sum += a[i][j];
    }
  }

  printf("%0.2f", (float)sum/(ROW*COL));

}

정답
3.50

=>
#define ROW 3 : 소스 코드 내 ROW를 3으로 바꾸겠다.
#define COL 2 : 소스 코드 내 COL를 2으로 바꾸겠다.
%0.2f : 소수점 뒤 2자리까지 출력

a[3][2] = {{1,2}, {3,4}, {5,6}};

a[0][0] = 1;
sum = 0 + 1 = 1;

a[0][1] = 2;
sum = 1 + 2 = 3;

a[1][0] = 3;
sum = 3 + 3 = 6;

a[1][1] = 4;
sum = 6 + 4 = 10;

a[2][0] = 5;
sum = 5 + 10 = 15;
a[2][1] = 6;
sum = 6 + 15 = 21;

21 / 3*2 = 21/6 = 3.5
%0.2f 이므로  3.50

# C++ 소스 코드, 출력 결과

#include <iostream>
int fn1(){
  return 5;
}

int fn2(){
  return fn1()+20;
}

int fn3(){
  return fn1()+fn2();
}

void main(){
  std::cout << fn3();
}

정답
30

# C++ 소스 코드, 출력 결과

#include <iostream>
using namespace std;
class A{
public:
  A( ){
    cout << "A" << endl;
  };
  A(int a){
    cout << "B" << endl;
  };
  ~A( ){
    cout << "C" << endl;
  };
  void fn( ){
    cout << "D" << endl;
  }
};

void main( ){
  A a = A(5);
  a.fn( );
}

정답
B
D
C

 

# 파이썬 

## 파이썬 소스 코드, 출력 결과 ( 자동 줄바꿈 된다. / 줄바꿈 원치 않을 경우 end=" " )

a = 5
for i in range(1, a+1):
  if a % i == 0:
    print(i)
    
정답
1
5

=> 
파이썬은 print 시 자동으로 줄바꿈이 된다.
줄바꿈을 원치 않을 경우 print(i, end="")로 표시한다.

for i in range(1, 5+1);
1 ~ 5 반복문

a = 1;
5 % 1 == 0;
print(1) // 파이썬에서는 자동 줄바꿈 된다.

a = 2;
5 % 2 != 0;

a = 3;
5 % 3 != 0;

a = 4; 
5 % 4 != 0;

a = 5;
5 % 5 == 0;
print(5)

## 파이썬 소스 코드, 출력 결과 ( slice / 문자열[시작:끝:step] )

String = "Hello World"
m = String[0:3] + String[-3:]
print(m)


정답
Helrld

=>
String[0:3] : Hel
String[-3:] : rld

slice를 사용한 문자열 가져오기. 문자열[시작:끝:step]
(끝낼 위치를 포함하지 않는다.)

## 파이썬 소스 코드, 출력 결과 ( ** 제곱 승 )

# 2의 3승 출력
print(2**3)
# 3의 2승 출력
print(3**2)


정답
8
9

=> 
파이썬의 기본 연산자
** : 제곱 승
/ : 몫
// : 정수 몫
% : 나머지

## 파이썬 소스 코드, 출력 결과 ( if ~ elif ~ else )

score = 60;
# 60점 이상이면 "합격입니다." 출력 아니면 "불합격 입니다." 출력
if score >= 60:
  print("합격입니다.")
else:
  print("불합격입니다")
  
  
정답
합격입니다.

=>
파이썬의 조건식
if 조건1:
	문장1:
elif 조건2:
	문장2:
else:
	문장3:

## 파이썬 소스 코드, 출력 결과 ( a, b = b, a 변수 값 서로 swap )

a = 10
b = 5
a, b = b, a
print(a)
print(b)


정답
5
10

=>
a, b = b, a : 두 변수의 값을 서로 swap 하는 코드

a, b = b, a
a = b;
b = a;

a = 5;
b = 10;

## 파이썬 소스 코드, 출력 결과 ( slice )

>>>a=[10,20,30,40,50,60,70,80,90] 
>>>a[3] 
40

>>>a[-5] 
50 

>>>a[:7:2] 
[10, 30, 50, 70]

>>>a[:7:3] 
[10, 40, 70]

>>>a[3:]
[40, 50, 60, 70, 80, 90]

>>>a[:5]
[10, 20, 30, 40, 50]


정답
40
50
a[:7:2] = [10, 30, 50, 70]	// 처음 ~ 7전까지, step 2 이므로 2개씩 건너뛰어서.
a[:7:3] = [10, 40, 70]	// 처음 ~ 7전까지, step 3 이므로 3개씩 건너뛰어서.
a[3:] = [40, 50, 60, 70, 80, 90]	// 3번째 ~ 끝까지
a[:5] = [10, 20, 30, 40, 50]	// 처음 ~ 5전까지

=>
a[0]은 10 출력     
a[1]은 20 출력
a[2]은 30 출력
a[3]은 40 출력
a[4]은 50 출력
a[5]은 60 출력
a[6]은 70 출력
a[7]은 80 출력
a[8]은 90 출력

a[-1]은 90출력
a[-2]은 80출력
a[-3]은 70출력
a[-4]은 60출력
a[-5]은 50출력
a[-6]은 40출력
a[-7]은 30출력
a[-8]은 20출력
a[-9]은 10출력


a[:7:2]는 처음 값인 10 부터 7번째인 70까지 2개씩 건너뛰어서 출력 

a[:7:3]는 처음 값인 10 부터 7번째인 70까지 3개씩 건너뛰어서 출력 

a[3:]은 40부터 끝까지 출력 

a[:5]은 처음부터 5번째 까지 출력

## 파이썬 소스 코드, 출력 결과

>>> i=1 
>>> a=4 
>>> while i <= 9: 
...     print(a, '*', i, '=', a*i) 
...     i = i + 1 
... 
4 * 1 = 4 
4 * 2 = 8 
4 * 3 = 12 
4 * 4 = 16 
4 * 5 = 20 
4 * 6 = 24 
4 * 7 = 28 
4 * 8 = 32 
4 * 9 = 36 
>>>print( i ) 


정답
10


=>
반복문이 i가 9일때 종료되지만, 4 * 9 = 36 출력 후 i = i + 1 로 값이 증가되며 종료.

## 파이썬 소스 코드, 출력 결과

>>> sum=0 
>>> a=[1,2,3,4,5] 
>>> for i in range(0,5): 
...     sum += a[i] 
>>> print(sum) 


정답
15


=>
for i in reange(0, 5)로 i 가 0 ~ 4까지 반복
i = 0
a[0] = 1

i = 1
a[1] = 2

i = 2
a[2] = 3

a = 3
a[3] = 4

a = 4
a[4] = 5

이므로.. sum에 누적해서 더한 값 = 1 + 2 + 3 + 4 + 5 = 15

## 파이썬 소스 코드, 생성자 및 소멸자 입력

class A:
  def (1)(self):
    print("생성자")
  def (2)(self):
    print("소멸자")

a = A()
del a


정답
(1) : __init__
(2) : __del__


=>
파이썬의 생성자
class 클래스명:
	def __init__(self)
		명령어;
        
파이썬의 소멸자
class 클래스명:
	def __del__(self)
    	명령어;

 

# SQL 쿼리 문제

## 학생 테이블, '이'씨 성을 가진 사람의 학번을 출력

학번 이름
2001 안창호
2002 김정호
2003 김유신
2004 허준
2005 이성계
2006 이순신

결과

학번
2005
2006
SELECT 학번
FORM 학생
WHERE 이름 LIKE '이%';



* LIKE 검색방법
'이'로 시작 : '이%'
'이'로 끝 : '%이'
'이'가 들어간 사람 : '%이%'
'이'로 시작, '이' 뒤에 1글자만 있는 사람 : '이_'	// 밑줄 1개
'이'로 시작, '이' 뒤에 2글자만 있는 사람 : '이__'	// 밑줄 2개
'이*신" 검색 : '이_신'

## 성적 테이블 IN 키워드 사용, '컴퓨터 구조'와 '알고리즘' 과목에 대한 학번별 평균 학점 구하는 쿼리

학번 과목 학점
2001 컴퓨터구조 4.5
2001 운영체제 4.0
2002 알고리즘 4.5
2003 컴퓨터구조 3.5
2003 알고리즘 2.5

결과

학번 평균
2001 4.5
2002 4.5
2003 3.0
SELECT 학번, AVG(학점) as 평균
FROM 성적
WHERE 과목 IN('컴퓨터구조', '알고리즘')
GROUP BY 학번;

## 성적 테이블 '컴퓨터구조' 과목을 수강한 사람의 학번과 학점을 학점순(오름차순)으로 정렬

학번 과목 학점
2001 컴퓨터구조 4.5
2001 운영체제 4.0
2002 알고리즘 4.5
2003 컴퓨터구조 3.5
2003 알고리즘 2.5
SELECT 학번, 학점
FROM 성적
WHERE 과목="컴퓨터 구조"
ORDER BY 학점 ASC;


DESC : 내림차순
ASC : 오름차순

## 성적 테이블에서 과목만 출력하는 쿼리 ( 단, 과목 중복 x )

학번 과목 학점
2001 컴퓨터구조 4.5
2001 운영체제 4.0
2002 알고리즘 4.5
2003 컴퓨터구조 3.5
2003 알고리즘 2.5
SELECT DISTINCT 과목
FROM 성적;

## 고객 테이블에서 나이가 50살 이상이면서 59살 이하이고, 성별이 남자인 사람의 이름을 출력하는 쿼리를 작성하시오.(단, BETWEEN 구문을 사용해야 한다.)

이름 나이 성별 주소
홍길동 20 경기도
임꺽정 59 전라도
유관순 35 경상도
나혜석 41 충청도
이순신 33 강원도
SELECT 이름
FROM 고객
WHERE 나이 BETWEEN 50 AND 59
AND 성별='남';

## 성적 테이블, SQL 실행결과 작성

SELECT SUM(성적)
FROM 성적 a, 학생 b
WHERE a.학번 = b.학번
AND a.학년='1';
학번 이름 학년
20170001 강은미 4
20180002 김정미 3
20190003 홍길동 2
20200004 장길산 1
20200005 김철희 1
학번 과목 점수
20190003 영어 90
20200004 영어 80
20200005 영어 90
정답
170


=> 20200004, 2020005의 점수 합계가 조회된다. 90 + 80 = 170

## 학생 테이블, SQL 실행 결과 작성

학번 이름 점수
2001 안창호 90
2002 김정호 85
2003 김유신 75
2004 허준 80
2005 이성계 95
제시된 SQL 쿼리
select count(이름) 
from
(
	select 이름 from 학생 where 성적 >= 80 and 성적 <= 90
    union select 이름 from 학생 where 성적 >= 75 and 성적 <= 80
);
count(이름)
4


=> union : 두 SQL 문장을 중복을 제거한 합집합을 출력

## 학생 테이블, INDEX 생성, 삭제 문제

  • 학생 테이블의 학번 속성을 이용 인덱스를 생성하고, 인덱스를 삭제하는 SQL문 작성
학번 이름 점수
2001 안창호 90
2002 김정호 85
2003 김유신 75
2004 허준 80
2005 이성계 95
CREATE INDEX INDEX_STUDENT ON 학생(학번);
DROP INDEX INDEX_STUDENT ON 학생;


=>
1. 인덱스 작성하기 
CREATE INDEX 인덱스명 ON 테이블명 (열명1, 열명2, ...);

2. 인덱스 삭제하기 
DROP INDEX 인덱스명 ON 테이블명; 

## 학생 테이블, 가장 높은 성적 출력하는 쿼리 작성

학번 이름 점수
2001 안창호 90
2002 김정호 85
2003 김유신 75
2004 허준 80
2005 이성계 95
학번 성적
2005 95
SELECT 학번, max(성적) as 성적
from 학생

## 성적 테이블, SQL 쿼리 실행 결과

학번 과목 성적
1000 보안 A
1001 운영체제 B
1002 통계 A+
1003 암호학 B+
1005 알고리즘 A
1006 보안 A+
select 과목 
from 
( 
    select 과목, count(과목) 
    from 성적 
    group by 과목 
    having count(과목) > 1 
) a;
과목
(  1  )
정답
(1) : 보안

 

# 계층 구조 문제

## 깊이 우선, 너비 우선 순서 작성하는 문제

  • 시스템을 구성하는 모듈들의 계층 구조에서 가장 상위에 있는 모듈부터 시작하여 하위에 있는 모듈들을 점진적으로 통합하는 하향식 통합 테스트 방식에 대한 그림이다. 깊이 우선 방식과 너비 우선 방식으로 통합 테스트를 수행할 때 올바른 순서를 쓰시오.

깊이 우선 방식 : M1, M2, M3, M4, M5, M6, M7, M8

너비 우선 방식 : M1, M2, M4, M8, M3, M5, M6, M7

 

출처 : 수제비 정보처리기사 cafe.naver.com/soojebi?iframe_url=/MyCafeIntro.nhn%3Fclubid=29835300

 

수제비- IT 커뮤니티 (정보처리기사... : 네이버 카페

수제비-수험생 입장에서 제대로 쓴 비법서(정보처리기사, 정보처리기능사, 빅데이터 분석기사 등 시리즈)

cafe.naver.com

반응형

+ Recent posts