JAVA(4문제)
https://www.mycompiler.io/ko/new/java
새 Java 프로그램 만들기 - 마이컴파일러 - myCompiler
실행 코드 코드 저장 기존 코드를 유지하시겠습니까? 에디터에 코드가 있는 동안 언어를 전환하려고 합니다. 이를 유지하려면 “기존 코드 유지”를 선택합니다. 예제로 바꾸려면 “예제로 바
www.mycompiler.io
1. 출력값 구하기
class Main {
public static void main(String[] args) {
int[] a = new int[]{1, 2, 3, 4};
int[] b = new int[]{1, 2, 3, 4};
int[] c = new int[]{1, 2, 3};
check(a, b);
check(a, c);
check(b, c);
}
public static void check(int[] a, int[] b) {
if (a==b) {
System.out.print("O");
}else{
System.out.print("N");
}
}
}
출력값 : NNN
== 연산자
- primitive type 값을 비교한다
- 요소가 아닌 주소 값을 비교
- 배열 비교시 주소값이 다르기 때문에 false 반환
equals() 메서드
- reference type 값을 비교한다
- 주소 값이 아닌 배열의 요소를 비교
- 배열 비교시 동일한 타입, 동일한 갯수, 동일한 요소, 동일한 정렬 순서라면 true 반환
2. 출력값 구하기
class Main {
public static void main(String[] args) {
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
ODDNumber OE = new ODDNumber();
System.out.print(OE.sum(a, true) + ", " + OE.sum(a, false));
}
}
interface Number {
int sum(int[] a, boolean odd);
}
class ODDNumber implements Number {
public int sum(int[] a, boolean odd) {
int result = 0;
for(int i=0; i < a.length; i++){
if((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0))
result += a[i];
}
return result;
}
}
출력값 : 25, 20
OE.sum(a, true) : 주어진 배열 a에서 홀수값을 더해준다
OE.sum(a, false) : 주어진 배열 a에서 짝수값을 더해준다
** 갯수를 세는 문제인지, 연산하는 문제인지 확인 잘하기!
3. 출력값 구하기
class Main {
public static void main(String[] args) {
String str = "abacabcd";
boolean[] seen = new boolean[256];
System.out.print(calculFn(str, str.length()-1, seen));
}
public static String calculFn(String str, int index, boolean[] seen) {
if(index < 0) return "";
char c = str.charAt(index);
String result = calculFn(str, index-1, seen);
if(!seen[c]) {
seen[c] = true;
return c + result;
}
return result;
}
}
출력값 : dcba
calculFn("abacabcd", 7, seen)
- return : d + calculFn("abacabcd", 6, seen) //seen['d'] = true
calculFn("abacabcd", 6, seen)
- return : c + calculFn("abacabcd", 5, seen) //seen['c'] = true
calculFn("abacabcd", 5, seen)
- return : b + calculFn("abacabcd", 4, seen) //seen['b'] = true
calculFn("abacabcd", 4, seen)
- return : a + calculFn("abacabcd", 3, seen) //seen['a'] = true
calculFn("abacabcd", 3, seen)
- return : calculFn("abacabcd", 2, seen) //seen['c'] = true
calculFn("abacabcd", 2, seen)
- return : calculFn("abacabcd", 1, seen) //seen['a'] = true
calculFn("abacabcd", 1, seen)
- return : calculFn("abacabcd", 0, seen) //seen['b'] = true
calculFn("abacabcd", 0, seen)
- return : calculFn("abacabcd", -1, seen) //seen['a'] = true
calculFn("abacabcd", -1, seen)
- return : ""
calculFn("abacabcd", 7, seen)
- return : d + c + b + a + "" = dcba
//seen['d'] = true, seen['c'] = true, seen['b'] = true, seen['a'] = true
4. 출력값 구하기
class Main {
public static void main(String[] args) {
String str = "ITISTESTSTRING";
String[] result = str.split("T");
System.out.print(result[3]);
}
}
출력값 : S
String[] split(String regex) : 인수로 온 특정 문자열 기준으로 나누어 배열에 담아서 반환
- T 기준으로 글자를 나눈 배열을 result에 대입
- result = {"I","IS""ES","S","RING"}
- result[3] = S
C언어(4문제)
https://www.mycompiler.io/ko/new/c
새 C 프로그램 만들기 - 마이컴파일러 - myCompiler
실행 코드 코드 저장 기존 코드를 유지하시겠습니까? 에디터에 코드가 있는 동안 언어를 전환하려고 합니다. 이를 유지하려면 “기존 코드 유지”를 선택합니다. 예제로 바꾸려면 “예제로 바
www.mycompiler.io
1. 출력값 구하기
#include <stdio.h>
int main() {
int arr[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int* parr[2] = {arr[1], arr[2]};
printf("%d", parr[1][1] + *(parr[1]+2) + **parr);
return 0;
}
출력값 : 21
이중 포인터 : int **p
- p : 기억공간 주소
- *p : 주소 p에 수록되어 있는 값, p 값이 주소
- **p : 주소 *p인 곳에 수록되어 있는 값, int형 자료
int *parr[2] = {arr[1], arr[2]};
- parr[0] = {4, 5, 6}
- parr[1] = {7, 8, 9}
parr[1][1] + *(parr[1]+2) + **parr
- parr[1][1] => 8
- *(parr[1]+2) => *parr[1][2] => 9
- **parr => 포인트변수 *parr의 값은 배열 첫번째 값의 주소값, 그 주소에 해당하는 값 => 4
2. 출력값 구하기
#include <stdio.h>
#include <string.h>
void sumFn(char* d, char* s) {
int sum = 0;
while (*s) {
*d = *s;
d++;
s++;
}
*d = '\0';
}
int main() {
char* str1 = "first";
char str2[50] = "teststring";
int result=0;
sumFn(str2, str1);
for (int i = 0; str2[i] != '\0'; i++) {
result += i;
}
printf("%d", result);
return 0;
}
출력값 : 10
포인터 변수
- char *p = "KOREA"; // 포인터 변수 p의 주소값에 K부터 차례로 저장
- p : KOREA
- p+2 : REA
- *p : K
- *(p+2) : R
- *p+2 : M
void sumFn(char* d, char* s) { ... }
- while (*s) : s가 가르키는 문자가 null 문자가 아닐 때까지 반복 => 즉 first 글자 수 만큼 반복
- *d = *s : 포인터 s가 가리키는 문자를 포인터 d에 주소값 위치에 대입 => 포인터변수 d = 포인터변수 s 주소에 값
- d++, s++ : 포인터를 다음 문자 위치로 이동
- *d = '\0' : 포인터변수 위치가 끝으로 이동한 상태 => 포인터변수d = '\0' 추가
- first 글자 수 만큼 반복, str2배열에 차례로 first+null 추가하면서 함수 종료
- 1번째 바퀴 : str2 : teststring => first 포인터 위치는 eststring, irst
- 2번째 바퀴 : str2 : first => first 포인터 위치는 string, rst
- ...
- 5번째 바퀴 : str2 : first => first 포인터 위치는 tring,
for (int i = 0; str2[i] != '\0'; i++){...}
- str2[i] != '\0' : str2 배열에서 null값 만나기 전까지 반복
- result += i : null 오기 전까지의 인덱스의 합 => 0 + 1 + 2 + 3 + 4 = 10
3. 출력값 구하기
#include <stdio.h>
void swap(int a, int b) {
int t = a;
a = b;
b = t;
}
int main() {
int a = 11;
int b = 19;
swap(a, b);
switch(a) {
case 1:
b += 1;
case 11:
b += 2;
default:
b += 3;
break;
}
printf("%d", a-b);
}
출력값 : -13
a, b는 전역변수가 아닌 지역변수기 때문에 swap(a,b) 가 실행되어도 main메서드 안에서 a,b는 변하지 않는다
swich(11) : b = 19+2+3 = 24
a-b = 11-24 = -13
4. 출력값 구하기
#include <stdio.h>
struct node {
int n1;
struct node *n2;
};
int main() {
struct node a = {10, NULL};
struct node b = {20, NULL};
struct node c = {30, NULL};
struct node *head = &a;
a.n2 = &b;
b.n2 = &c;
printf("%d\n", head->n2->n1);
return 0;
}
출력값 : 20
구조체 포인터 변수 head
- 구조체 변수 a의 주소값
구조체 변수 a
- n1 = 10, n2 = b의 주소값
구조체 변수 b
- n1 = 20, n2 = c의 주소값
head->n2->n1
- a의 주소값 -> a.n2 : b의 주소값 -> b.n1 : 20
PYTHON(1문제)
https://www.mycompiler.io/ko/new/python
새 Python 프로그램 만들기 - 마이컴파일러 - myCompiler
실행 코드 코드 저장 기존 코드를 유지하시겠습니까? 에디터에 코드가 있는 동안 언어를 전환하려고 합니다. 이를 유지하려면 “기존 코드 유지”를 선택합니다. 예제로 바꾸려면 “예제로 바
www.mycompiler.io
1. 출력값 구하기
def fnCalculation(x,y):
result = 0;
for i in range(len(x)):
temp = x[i:i+len(y)]
if temp == y:
result += 1;
return result
a = "abdcabcabca"
p1 = "ab";
p2 = "ca";
out = f"ab{fnCalculation(a,p1)}ca{fnCalculation(a,p2)}"
print(out)
출력값 : ab3ca3
f 문자열 포매팅
- 파이썬 3.6버전 이후 사용 가능
- 변수 값을 생성 한 후 그 값을 참조할 수 있음
- 형식 : f"문자열 {} 문자열 "
- 문자열 중간에 {}안에 들어있는 표현식의 값을 문자열로 삽입 해준다
SQL(2문제)
https://www.programiz.com/sql/online-compiler/
Online SQL Editor
www.programiz.com
1. 빈칸 작성
사원 [사원번호(PK), 이름, 나이, 부서]
부서 [사원번호(PK), 이름, 주소, 나이]
INSERT INTO 사원 (사원번호, 이름, 주소, 부서) [ ① ] (32431, '정실기', '서울', '영업');
INSERT INTO 부서 (사원번호, 이름, 나이, 부서)
[ ② ] 사원번호, 이름, 나이, 23 FROM 사원 WHERE 이름 = '정실기';
SELECT * [ ③ ] 사원;
UPDATE 사원 [ ④ ] 부서 = '퇴사' WHERE 사원번호 = 32431;
① : VALUES
② : SELECT
③ : FROM
④ : SET
레코드 삽입 : INSERT INTO 테이블명(컬럼1, ..., 컬럼N) VALUES (값1, ..., 값N);
데이터 조회 : SELECT 컬럼명1, ... FROM 테이블명 WHERE 조건;
데이터 수정 : UPDATE 테이블명 SET 컬럼명 = 값 WHERE 조건;
2. 릴레이션의 Cardinality, Degree 구하기
이름 | 나이 | A | B |
김 | 23 | 1 | 5 |
박 | 25 | 2 | 3 |
고 | 42 | 3 | 8 |
최 | 20 | 2 | 9 |
이 | 25 | 1 | 2 |
Cardinality : 5
Degree : 4
릴레이션 : 표의 형태로 구조화 되어 있는 것
행 : 레코드(record), 투플(tuple)
열 : 컬럼(column), 필드(field)
스키마(schema) : 컬럼, 데이터 타입, 컬럼 순서, 도메인, 릴레이션 이름
도메인(or 영역) : 컬럼의 가질 수 있는 값의 범위
차수(degree) : 릴레이션에 존재하는 속성(컬럼)의 갯수
카디널리티(cardinality) : 릴레이션에 존재하는 레코드의 갯수
'문제 > 정보처리기사실기' 카테고리의 다른 글
[정보처리기사 실기] 2022년 3회 JAVA, C, PYTHON, SQL (0) | 2024.09.21 |
---|---|
[정보처리기사 실기] 2023년 1회 JAVA, C, PYTHON, SQL (0) | 2024.09.12 |
[정보처리기사 실기] 2023년 2회 JAVA, C, PYTHON, SQL (0) | 2024.08.26 |
[정보처리기사 실기] 2023년 3회 JAVA, C, PYTHON, SQL (0) | 2024.08.20 |
[정보처리기사 실기] 2024년 1회 JAVA, C, PYTHON, SQL (0) | 2024.08.04 |