반응형
# 정보처리기사 손코딩 문제
# 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
반응형
'자격증 > 정보처리기사' 카테고리의 다른 글
| 오버로딩, 오버라이딩 (0) | 2020.10.11 |
|---|---|
| 파레토 법칙, 힌트, 테스트 오라클, 미들웨어, 릴리즈 노트, 스머핑, IaaS, PaaS, SaaS, 싱글톤 패턴, LDAP (0) | 2020.10.10 |
| 데이터 베이스 설계 순서 (0) | 2020.10.05 |
| RTO, BCP, DRS (0) | 2020.10.05 |
| 증감연산자 문제 (0) | 2020.10.04 |