수제비 2022 정보처리기사 실기 수험서를 보고 공부한 기록입니다.
㉮ 변수(Varible)의 개념
㉯ 변수 선언
float a; //실수형 변수 a 선언
int b=0; //초기값 0인 정수형 변수 b 선언
㉮ C 언어의 static 변수
#include <stdio.h>
void increase(){ //increase 함수 선언
static int count=0; //static 정수형 변수 count를 선언과 동시에 0으로 초기화
printf("count=%d\n", count); //count 값을 화면에 출력함
count++; //count 값 1 증가시킴
}
void main(){ //main 함수 선언
increase(); //increase 함수 호출
increase(); //increase 함수 호출
}
count=0
count=1
㉯ 자바의 static 변수
class Soojebi{
static int count=0; //정수형 static 변수 count를 선언하고 0으로 초기화
}
public class SoojebiMain{
public static void main(String[] args){
Soojebi s=new Soojebi(); //Soojebi 클래스 객체 s 생성
s.count++; //s의 count 값을 1 증가시킴
System.out.println(s.count); //화면에 s의 count 값을 출력함
s.count++; //s의 count 값을 1 증가시킴
System.out.println(s.count); //화면에 s의 count 값을 출력함
}
}
1
2
㉮ C 언어의 1차원 배열 선언
#include <stdio.h>
void main(){
int a[4]={1, 2};
int i;
//a 배열의 요소 개수는 4개지만,
//초기값은 1, 2로 두 개만 명시되어 있으므로 나머지 2개의 공간은 0으로 초기화
for(i=0; i<4; i++)
printf("%d\n", a[i]); //0번째 요소부터 3번째 요소의 값을 출력
}
1
2
0
0
㉯ 자바의 배열 선언
class Soojebi{
public static void main(String[] args){
int[] a=new int[3]; //int 형 변수 3개 선언
System.out.println(a.length); //a 배열의 개수를 출력
}
}
3
㉮ C 언어의 2차원 배열 선언
■C 언어 2차원 배열 선언 및 출력 예제
#include <stdio.h>
void main(){
int a[2][3]={1,2,3,4};
int i,j;
/*
a 배열의 요소 개수는 2x3개지만, 초기값은 1,2,3,4만 명시되어 있으므로
나머지 2개의 공간은 0으로 초기화
*/
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("%d",a[i][j]);
}
}
/*
처음에 i=0일 때 j=0일 때부터 j<3인 j=2까지 반복
a[0][0] 값인 1, a[0][1] 값인 2, a[0][2] 값인 3을 출력
다음에 i=1일 때 j=0일 때부터 j<3인 j=2까지 반복
a[1][0] 값인 4, a[1][1] 값인 0, a[1][2] 값인 0을 출력
*/
}
1 2 3 4 0 0
㉯ 자바 언어의 2차원 배열 선언
■자바 length 속성 사용 예제
class Soojebi{
public static void main(String[] args){
int[][] a=new int[3][2]; //int형 변수 3x2개 선언
System.out.println(a.length); //a 배열의 행의 개수를 출력
System.out.println(a[0].length); //a[0] 배열의 개수를 출력
}
}
3
2
■자바 length 속성 사용 예제
class Soojebi{
public static void main(String[] args){
int[][] a={{1,2}, {3}, {4,5,6}}; //int형 2차원 배열 선언
System.out.println(a.length); //a 배열의 행의 개수를 출력
System.out.println(a[0].length); //a[0] 배열의 개수를 출력
System.out.println(a[1].length); //a[1] 배열의 개수를 출력
System.out.println(a[2].length); //a[2] 배열의 개수를 출력
}
}
3
2
1
3
포인터는 변수의 주소값을 저장하는 공간이다
데이터_타입* 포인터_변수명 = &변수명;
int a=10;
int* b=&a;
printf("%d %d", a, *b);
//b가 가리키는 * 값은 a이므로 *b와 a는 값이 같음
▼배열의 주소와 0번지 값
■C 언어 1차원 배열과 1차원 포인터
#include <stdio.h>
void main(){
int a[3]={1,2};
int *p=a;
//a 배열의 요소 개수는 3개지만, 초기값은 1,2만 명시되어 있으므로 나머지 1개의 공간은 0으로 초기화
printf("%d %d %d\n", a[0],a[1],a[2]);
//a 배열의 0번지, 1번지, 2번지 값을 출력
printf("%d %d %d\n", *a,*(a+1),*(a+2));
//a만 단독으로 쓰면 포인터이므로 a가 가리키는 값, a+1이 가리키는값, a+2가 가리키는 값 출력
printf("%d %d %d\n", *p, *(p+1),*(p+2));
//p는 a랑 동일하므로 *p,*(p+1),*(p+2)는 각각 *a, *(a+1),*(a+2)와 동일하게 출력
printf("%d %d %d\n", p[0],p[1],p[2]);
//p는 a랑 동일하므로 p[0],p[1],p[2]는 a[0],a[1],a[2]와 동일하게 출력
}
1 2 0
1 2 0
1 2 0
1 2 0
#include <stdio.h>
void main(){
int a[3][2]={1,2,3,4,5,6};
//2차원 배열 선언
int *p=a[1];
//a 배열의 1번지 주소(1차원 포인터)를 p라는 1차원 포인터 변수에 저장
printf("%d %d %d\n", *a[0],*a[1],*a[2]);
//a[] 형태는 1차원 포인터와 같으므로 *을 붙이면 값을 가리킬 수 있음
printf("%d %d %d\n", **a, **(a+1),**(a+2));
//a 형태는 2차원 포인터와 같으므로 *를 두 번 붙여야 값을 가리킬 수 있음
printf("%d %d\n", *p, *(p+1));
/*
p는 a[1]이라고 초기화를 했으므로 *p는 각각 a[1]이 가리키는 값인
a[1][0]을 출력하고, *(p+1)는 a[1]이 가리키는 &a[1][0]에서 한 칸 뒤의 값인
a[1][1]의 값을 출력
*/
printf("%d %d\n", p[0],p[1]);
//*p와 p[0]는 동일하고 *(p+1)은 p[1]과 동일하므로 a[1][0], a[1][1] 값이 출력됨
}
1 3 5
1 3 5
3 4
3 4
#include <stdio.h>
void main(){
int a[3][2]={1,2,3,4,5,6}; //2차원 배열 선언
int *p[3]={a[2],a[0],a[1]};
//a 배열의 2,0,1번지 주소(1차원 포인터)를 p라는 포인터 배열에 저장
printf("%d %d %d\n", a[0][0], a[1][0], a[2][0]);
//2차원 배열 출력
printf("%d %d %d\n", *a[0], *a[1], *a[2]);
//a[] 형태는 1차원 포인터와 같으므로 *를 붙여야 값을 가리킬 수 있음
printf("%d %d %d\n", p[1][0], p[2][0], p[0][0]);
/*
p[1]은 a[0]이므로 p[1][0]은 a[0][0]를 출력, p[2]는 a[1]이므로 p[2][0]은 a[1][0]을 출력
p[0]는 a[2]이므로 p[0][0]은 a[2][0]를 출력
*/
printf("%d %d %d\n", *p[1], *p[2], *p[0]);
//p[1][0]과 *p[1]과 동일하고, p[2][0]과 *p[2]와 동일하고, p[0][0]과 *p[0]이 동일
}
1 3 5
1 3 5
1 3 5
1 3 5
#include <stdio.h>
void main(){
int a[3][2]={1,2,3,4,5,6}; //2차원 배열 선언
int (*p)[2]=a;
int (*p)[2]=a;
int (*q)[2]=a+1;
/*
p, q라는 2차원 배열 변수에 a 배열의 0, 1번지 주소를 2차원 포인터 변수에
저장(a는 2차원 배열로 a만 단독으로 사용하면 2차원 포인터이므로 2차원 포인터 형태로 선언)
*/
printf("%d %d %d\n", a[0][0], a[0][1], a[1][0]);
//a를 2차원 배열 형태로 출력
printf("%d %d %d\n", p[0][0], p[0][1], p[1][0]);
//p는 2차원 포인터로 a랑 같으므로 2차원 배열처럼 사용 가능
printf("%d %d %d\n", q[0][0], q[0][1], q[1][0]);
//q는 2차원 포인터로 a[1][0] 번째를 시작점으로 2차원 배열과 동일하게 사용 가능
}
1 2 3
1 2 3
3 4 5
#include <stdio.h>
void main(){
char a[7]="Hello";
//1차원 char 배열 선언
printf("%s\n", a);
//시작점 a에 해당하는 값인 a[0]부터 NULL 값 전인 a[4]까지 출력
printf("%s\n", a+1);
//시작점 a+1에 해당하는 값인 a[1]부터 NULL 값 전인 a[4]까지 출력
a[4]=NULL;
//a[4]의 값을 NULL로 변경
printf("%s\n", a+1);
//시작점 a+1에 해당하는 값인 a[1]부터 NULL 값 전인 a[3]까지 출력
(a[4]가 NULL로 바뀌었으므로 a[3]까지 출력)
}
Hello
ello
ell
#include <stdio.h>
void main(){
char a[2][8]={"Hello", "Soojebi"};
//2차원 char 배열 선언 a[0]에는 "Hello"가, a[1]에는 "Soojebi"가 저장
printf("%s\n", a[0]);
//시작점 a[0]에 해당하는 값인 a[0][0]부터 NULL 값 전인 a[0][4]까지 출력
printf("%s\n", a[1]);
//시작점 a+1에 해당하는 값인 a[1][0]부터 NULL 값 전인 a[1][7]까지 출력
a[0][4]=NULL;
//a[0][4]의 값을 NULL로 변경
printf("%s\n", a[0]+2);
//시작점 a[0]+2에 해당하는 값인 a[0][2]부터 NULL 값 전인 a[0][3]까지 출력
printf("%s\n", a[1]+3);
//시작점 a[1]+3에 해당하는 값인 a[1][3]부터 NULL 값 전인 a[1][7]까지 출력
}
Hello
Soojebi
ll
jebi
㉮ HashSet 개념
㉯ HashSet 선언
㉰ HashSet 메소드
public static void main (String[] args){
Set h=new HashSet(); //h라는 변수에 HashSet 클래스 생성
h.add(2); //HashSet에 2가 추가
System.out.println(h); //[2]가 출력됨
h.add(1);
System.out.println(h);
//HashSet에 1이 추가되어 1, 2가 있으므로 [1, 2]가 출력됨(집합에서 순서는 중요하지 않음)
h.add(1);
System.out.println(h);
//HashSet에 1이 추가되었지만 이미 1이 있으므로 추가되지 않음
h.remove(1);
//HashSet에서 1을 제거
System.out.println(h);
//HashSet에 2만 남았으므로 [2]가 출력됨
System.out.println(h.size());
//HashSet에 2라는 원소 1개만 있으므로 1이 출력
}
[2]
[1, 2]
[1, 2]
[2]
1
㉮ ArrayList 개념
㉯ ArrayList 선언
㉰ ArrayList 메소드
public static void main(String[] args){
List a=new ArrayList();
//a라는 변수에 ArrayList 클래스 생성
a.add(2);
//ArrayList에 2추가
System.out.println(a);
//[2]가 출력됨
a.add(1);
System.out.println(a);
//ArrayList에 1이 추가되어 [2, 1]이 출력됨(순서가 중요함)
a.add(1);
System.out.println(a);
//ArrayList에 1이 추가되어 [2,1,1]이 출력됨(중복 값 허용)
a.add(1, 3);
System.out.println(a);
/*
ArrayList의 1번지에 3이라는 값이 추가되어
현재 0번지인 2와 1번지인 1 사이에 값 추가
*/
a.remove(2);
System.out.println(a);
//ArrayList의 2번지에 있는 값인 1을 제거
System.out.println(a.get(2));
System.out.println(a.size());
//ArrayList의 2번지에 있는 값 출력 및 원소 개수 출력
}
[2]
[2,1]
[2,1,1]
[2,3,1,1]
[2,3,1]
1
3
㉮ HashMap 개념
㉯ HashMap 선언
㉰ HashMap 메소드
public static void main (String[] args){
Map h=new HashMap();
//h라는 변수에 HashMap 클래스 생성
h.put(1, "A");
System.out.println(h);
//h에 1에 해당하는 값으로 A를 추가
h.put(1, "C");
System.out.println(h);
/*
h에서 1에 해당하는 값으로 C를 추가
(1에 해당하는 값은 기존 A에서 C로 변경됨)
*/
h.put(2, "D");
System.out.println(h);
//h에서 2에 해당하는 값으로 D를 추가
h.remove(1);
System.out.println(h);
//h에서 키값인 1에 해당하는 값을 삭제
System.out.println(h.get(2));
//h에서 키값이 2에 해당하는 값을 출력
System.out.println(h.size());
//h에서 요소의 개수를 출력
}
{1=A}
{1=C}
{1=C, 2=D}
{2=D}
D
1
㉮ 세트형 개념
㉯ 세트형 선언
㉰ 세트형 메소드
s={1,5,7}
#s라는 변수에 1,5,7 값을 세트형으로 초기화
s.add(3) #s에 3이 없으므로 3이 추가됨
print(s)
s.add(5) #s에 5를 추가하지만 이미 5가 있으므로 변화 없음
print(s)
s.update([1,2,3,4]) #s에 1,2,3,4를 한 번에 추가하지만 1과 3은 이미 있으므로 2,4만 추가
print(s)
s.remove(1) #s에서 1을 제거
print(s)
{1,3,5,7}
{1,3,5,7}
{1,2,3,4,5,7}
{2,3,4,5,7}
㉮ 리스트형 개념
㉯ 리스트형 선언
㉰ 리스트형 메소드
㉱ 리스트 인덱싱
첫 번째 요소 | 두 번째 요소 | ... | 뒤에서 두 번째 요소 | 마지막 요소 |
---|---|---|---|---|
0 | 1 | ... | (n-2) | (n-1) |
-n | -(n-1) | -2 | -1 |
㉲ 리스트 슬라이싱
[시작 인덱스]
[종료 인덱스]
[스텝]
l=[3,5,7]
#l이라는 변수에 3,5,7 값을 리스트형으로 초기화
l.append(3)
#l의 맨 뒤에 3을 추가
print(l)
#3,5,7 뒤에 3이 추가되어 [3,5,7,3]
l.insert(2,4)
print(l)
#l의 2번지에 4라는 값을 추가(2번지는 세번째 값이므로 세 번째에 4추가)
l.remove(3)
print(l)
#l에서 3을 제거하는데 3은 두 개이므로 앞의 3이 지워짐
print(l[ : 2])
#콜론(:)앞에 생략되어 있으므로 시작 인덱스가 0이 되고, 0번지부터 1번지까지 접근
[3,5,7,3]
[3,5,4,7,3]
[5,4,7,3]
[5,4]
㉮ 튜플(Tuple)형 개념
㉯ 튜플형 선언
㉰ 튜플 인덱싱
첫 번째 요소 | 두 번째 요소 | ... | 뒤에서 두 번째 요소 | 마지막 요소 |
---|---|---|---|---|
0 | 1 | ... | (n-2) | (n-1) |
-n | -(n-1) | -2 | -1 |
㉱ 튜플 슬라이싱
㉮ 딕셔너리(Dictionary)형 개념
㉯ 딕셔너리형 선언
㉰ 딕셔너리형 요소 추가
㉱ 딕셔너리형 요소 삭제
d={'A':5, 'C':4}
print(d)
#d라는 변수에 키가 'A'일 때 값을 5로, 'C'일 때 값을 4로 초기화
d['K']=7
print(d)
#d라는 변수에 키가 'K'일 때 값을 7로 저장
del d['C']
print(d)
#d라는 변수에 키가 'C'에 해당하는 값을 삭제
d['K']=6
print(d)
#d라는 변수에 키가 'K'일 때 값을 6으로 저장(기존에 키가 'K'일 때 값이 7에서 6으로 변경)
[사용 가능 문자]
규칙 | 사용 가능 예시 | 사용 불가능 예시 |
---|---|---|
영문 대문자/소문자, 숫자, 밑줄('_')의 사용이 가능 | a, A, a1, _, _hello | ?a, <a |
[변수 사용 규칙]
규칙 | 사용 가능 예시 | 사용 불가능 예시 |
---|---|---|
첫 자리에는 숫자를 사용할 수 없음 | _1, a1, a100 | 1, 1a, 1A, 1234 |
변수 이름의 중간에는 공백을 사용할 수 없음 | my_student | my student |
[변수 의미 부여]
규칙 | 사용 가능 예시 | 사용 불가능 예시 |
---|---|---|
데이터값의 의미나 역할을 표현 | age, student | |
이미 사용되고 있는 예약어의 경우에는 변수로 사용할 수 없음 | For, If, While | int, short, long, for, while, do, continue, break, if, else |
카멜 표기법(Camel Case)
파스칼 표기법(Pascal Case)
스네이크 표기법(Snake Case)
헝가리안 표기법(Hungarian Case)