28. [기본 문법 활용하기] 변수 활용
수제비 2022 정보처리기사 실기 수험서를 보고 공부한 기록입니다.
👉데이터 타입
1. 데이터 타입(Data Type)의 개념
- 데이터 타입은 프로그래밍 언어에서 실수치, 정수 자료형과 같은 여러 종류의 데이터를 식별하는 형태이다
- 메모리 공간을 효율적으로 사용하고 2진수 데이터를 다양한 형태로 사용하기 위해 존재한다
2. 데이터 타입 유형
- 불린(Boolean)
- 조건이 참인지 거짓인지 판단하고자 할 때 사용하는 데이터 타입
- C 언어에서는 미지원
- 자바에서는 참일 경우 true, 거짓일 경우 false로 표현
- 파이썬에서는 참일 경우 True, 거짓일 경우 False로 표현
- 문자(Character)
- 문자 하나를 저장하고자 할 때 사용하는 데이터 타입
- 메모리에 저장은 숫자로 저장됨
- 문자열 타입(String)
- 나열된 여러 개의 문자를 저장하고자 할 때 사용하는 타입
- C 언어는 char 배열을 사용하여 구현
- 정수 타입(Integer)
- 정수값을 저장하고자 할 때 사용하는 데이터 타입
- 부동 소수점(Floating Point)
- 소수점을 포함하는 실수값을 저장하고자 할 때 사용하는 데이터 타입
👉기본 저장 공간
1. 변수
① 일반 변수
㉮ 변수(Varible)의 개념
- 변수는 저장하고자 하는 어떠한 값이 있을 때, 그 값을 주기억장치에 기억하기 위한 공간이다
- 자료형과 변수명을 작성하여 변수를 생성하는 과정이다
- C, 자바에서는 변수 선언을 하고, 파이썬에서는 별도로 변수 선언을 하지 않는다
㉯ 변수 선언
- 불린, 문자, 정수, 실수 등을 선언할 때 사용
- 초기값이 없는 경우: 데이터_타입 변수명;
- 초기값이 있는 경우: 데이터_타입 변수명=초기값;
float a; //실수형 변수 a 선언
int b=0; //초기값 0인 정수형 변수 b 선언
② static 변수
- static 변수는 프로그램이 시작될 때 변수를 초기화하고, 프로그램이 종료되기 전까지 메모리가 유지되는 변수이다
- 변수를 static으로 생성하면 처음에 한 번만 초기화가 되며, 함수에 의해서 변수 선언 부분이 여러 번 호출되더라도 초기화하지 않는다
㉮ 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 변수는 프로그램이 종료하기 전까지 변수가 사라지지 않고 계속 유지된다
- increase 함수를 호출할 때 count는 static 변수이므로 처음 한 번만 count 값이 0으로 초기화되고, increase 함수를 두 번째 호출할 때 static int count=0;을 만나더라도 count를 0으로 초기화하지 않는다
㉯ 자바의 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
2. 배열
① 배열(Array) 개념
- 배열은 같은 타입의 변수들로 이루어진 집합이다
② 1차원 배열 선언
㉮ C 언어의 1차원 배열 선언
- 초기값이 없는 경우: 타입 배열명[배열_요소_개수];
- 초기값이 있는 경우: 타입 배열명[배열_요소_개수]={초기값};
- 배열 요소 개수에 정의된 숫자만큼 같은 타입의 데이터 공간이 할당된다
- 초기값을 선언하지 않을 경우 쓰레기값이 저장된다
- 배열 요소 개수보다 적은 개수만큼 초기화할 경우 초기값이 명시되지 않은 값들은 자동으로 0으로 초기화된다
#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
㉯ 자바의 배열 선언
- 초기값이 없는 경우
- 타입[ ] 배열명=new 타입[배열_요소_개수];
- 타입 배열명[ ]=new 타입[배열_요소_개수];
- 초기값이 있는 경우: 타입[ ] 배열명={초기값};
- 배열 요소 개수에 정의된 숫자만큼 같은 타입의 데이터 공간이 선언된다
- 배열 요소 개수를 명시하지 않고 초기값이 정의되어 있을 경우 초기값 개수만큼 공간이 선언된다
- 초기값을 선언하지 않을 경우 정수일 때는 0, 실수일 때는 0.0, 문자열일 때는 NULL이 저장되어 있다
- 불린, 문자, 정수, 실수 등을 배열로 선언할 때 사용한다
- 자바에서 배열의 크기를 구할 때는 length 속성을 사용한다
class Soojebi{
public static void main(String[] args){
int[] a=new int[3]; //int 형 변수 3개 선언
System.out.println(a.length); //a 배열의 개수를 출력
}
}
3
③ 2차원 배열 선언
㉮ C 언어의 2차원 배열 선언
- 초기값이 없는 경우: 타입 배열명[행의 개수][열의 개수];
- 초기값이 있는 경우: 타입 배열명[행의 개수][열의 개수]={초기값};
- (행의 개수)×(열의 개수)에 정의된 숫자만큼 같은 타입의 데이터 공간이 할당된다
- 초기값을 선언하지 않으면 쓰레기값이 저장된다
- (행의 개수)×(열의 개수)보다 적은 개수만큼 초기화할 경우 초기값이 명시되지 않은 값들은 0으로 초기화된다
■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차원 배열 선언
- 초기값이 없는 경우
- 타입[][] 배열명=new 타입[행의 개수][열의 개수];
- 타입 배열명[][]=new 타입[행의 개수][열의 개수];
- 초기값이 있는 경우: 타입[][] 배열명={{초기값}, {초기값}, ...};
- 배열 요소 개수에 정의된 숫자만큼 같은 타입의 데이터 공간이 선언된다
- 배열 요소 개수를 명시하지 않고 초기값이 정의되어 있을 경우 초기값 개수만큼 공간이 선언된다
- 초기값을 선언하지 않을 경우 정수일 때는 0, 실수일 때는 0.0, 문자열일 때는 NULL이 저장되어 있다
- 불린, 문자, 정수, 실수 등을 배열로 선언할 때 사용한다
- 자바에서 배열의 크기를 구할 때는 length 속성을 사용한다
■자바 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
3. 포인터
① 포인터(Pointer) 개념
포인터는 변수의 주소값을 저장하는 공간이다
② 포인터 선언
데이터_타입* 포인터_변수명 = &변수명;
- 데이터 타입 뒤에 *를 붙이면 주소를 저장하는 포인터 변수라는 의미이고, 일반 변수명에 &를 붙이면 해당 변수명의 주소값이다
- int형 변수를 가리키는 포인터 변수 선언 시 int*를, char형 변수를 가리키는 포인터 변수 선언 시 char*를, float형 변수를 가리키는 포인터 변수 선언 시 float*를 사용해야 한다
- 주소에 해당하는 값을 가리킬 때에는 *를 사용한다
int a=10;
int* b=&a;
printf("%d %d", a, *b);
//b가 가리키는 * 값은 a이므로 *b와 a는 값이 같음
4. 배열과 포인터
①1차원 배열과 1차원 포인터
- 1차원 배열에서 배열명만 단독으로 사용할 경우 1차원 포인터와 동일하다
- 1차원 배열일 때 배열명[요소] 형태, *(배열명+요소), 1차원 포인터일 때 포인터[요소] 형태, *(포인터+요소)일 경우 값을 가리킨다
- 데이터_타입 배열명[요소]; 일 때 다음 코드는 동일하다
▼배열의 주소와 0번지 값
- 배열의 주소: 배열명==&배열명[0];
- 배열의 0번지 값: 배열명[0]==*배열명;
- ex) int a[4]; 일 때 a 배열의 주소인 a는 &a[0]와 동일하고, a의 0번지 값인 a[0]은 *a와 동일하다
■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
② 2차원 배열과 1차원 포인터
- 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일하다
- 2차원 배열일 때 배열명[요소] 형태, *(배열명+요소)는 1차원 포인터와 동일하고, 1차원 포인터에 대해 *과 []을 이용해야 값을 가리킬 수 있다
#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
③ 2차원 배열과 포인터 배열
#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
④ 2차원 배열과 2차원 포인터
- 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일하다
- 2차원 배열일 때 배열명[요소][요소], *배열명[요소], **(배열명+요소)일 경우 값을 가리킨다
#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
⑤ 1차원 배열과 문자열
- 문자열을 초기화할 때 마지막에 NULL 문자가 삽입되므로 초기화하는 글자수보다 1 이상 큰 값으로 배열을 선언한다(초기화할 때 배열의 크기를 명시하지 않으면 문자열의 문자 수 +1만큼 자동으로 생성)
- printf 함수에서 %s를 이용하여 문자열을 읽고 출력하는데, printf 파라미터로 문자를 읽기 시작할 시작 주소를 알려주면 시작 주소부터 NULL 직전값까지 읽어서 출력한다
#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
⑥ 2차원 배열의 문자열
- 문자열을 여러 개 정의할 때 2차원 배열을 사용한다
- printf 함수에서 %s를 이용하여 문자열을 읽고 출력하는데, printf 파라미터로 문자를 읽기 시작할 시작 주소를 알려주면 시작 주소부터 NULL 직전 값까지 읽어서 출력한다
#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
👉자료형
1. 자바
- HashSet
- 중복된 원소를 허용하지 않는 집합(Set)의 성질을 가진 클래스
- 순서가 중요하지 않음
- ArrayList
- 크기가 가변적으로 변하는 선형리스트의 성질을 가진 클래스
- 순서가 중요함(인덱스를 통해 접근 가능)
- LinkedList
- 데이터를 저장하는 노드가 이전 노드와 다음 노드의 상태를 알고 있는 링크드 리스트 자료구조를 구현한 클래스
- HashMap
- 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료구조를 구현한 클래스
① HashSet 형
㉮ HashSet 개념
- HashSet은 Set의 자식 클래스(하위 클래스; 파생 클래스)로 중복된 원소를 허용하지 않는 집합의 성질을 가지고 있는 자료형이며 클래스이다
㉯ HashSet 선언
- Set 변수명=new HashSet();
- HashSet 변수명=new HashSet();
- Set은 HashSet의 부모 클래스(상위 클래스)이기 때문에 타입 선언 시 Set과 HashSet 둘 다 상관없으나 HashSet의 기능을 사용하기 위해서는 대입 부분에 HashSet()으로 생성해야 한다
㉰ HashSet 메소드
- add(값)
- 값을 추가하는 메소드
- 중복된 값이 들어오면 추가하지 않음
- remove(값)
- 값을 제거하는 메소드
- size()
- 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는 List의 자식 클래스로 크기가 가변적으로 변하는 선형리스트의 성질을 가지고 있는 자료형이며 클래스이다
㉯ ArrayList 선언
- List 변수명=new ArrayList();
- ArrayList 변수명=new ArrayList();
- List는 ArrayList의 부모 클래스(상위 클래스)이기 때문에 타입 선언 시 List와 ArrayList의 기능을 사용하기 위해서는 대입 부분에 ArrayList()로 생성해야 한다
㉰ ArrayList 메소드
- add(값): 값을 추가하는 메소드
- add(인덱스, 값): 해당 인덱스(번지)에 값을 추가하는 메소드
- remove(인덱스): 해당 인덱스(번지)에 값을 제거하는 메소드
- get(인덱스): 해당 인덱스(번지)에 값을 얻는 메소드
- size(): 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은 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료구조를 구현한 자료형이며 클래스이다
㉯ HashMap 선언
- Map 변수명=new HashMap();
- HashMap 변수명=new HashMap();
- Map은 HashMap의 부모 클래스(상위 클래스)이기 때문에 타입 선언 시 Map과 HashMap 둘 다 상관없으나 HashMap의 기능을 사용하기 위해서는 대입 부분에 HashMap()으로 생성해야 한다
㉰ HashMap 메소드
- put(키, 값): 해당 키에 해당하는 값을 추가하는 메소드
- remove(키): 해당 키에 해당하는 값을 제거하는 메소드
- get(키): 해당 키에 해당하는 값을 얻는 메소드
- size(): 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
2. 파이썬
- 세트형: 중복된 원소를 허용하지 않는 집합의 성질을 가지고 있는 자료구조
- 리스트형: 크기가 가변적으로 변하는 선형리스트의 성질을 가지고 있는 자료구조
- 튜플형: 초기에 선언된 값에서 값을 생성, 삭제, 수정이 불가능한 형태의 자료구조
- 딕셔너리형: 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료구조
① 세트(Set)형
㉮ 세트형 개념
- 세트형은 중복된 원소를 허용하지 않는 집합의 성질을 가지고 있는 자료형이다
㉯ 세트형 선언
- 세트명=set([요소1, 요소2, ...])
- 세트명={요소1, 요소2, ...}
- set라는 키워드로 세트형을 초기화하거나 {, }를 이용하여 세트형을 선언한다
㉰ 세트형 메소드
- add(값): 값을 1개 추가하는 메소드
- update([값1, 값2, ...]): 여러 개의 값을 한꺼번에 추가하는 메소드
- remove(값): 특정 값을 제거하는 메소드
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}
② 리스트(List)형
㉮ 리스트형 개념
- 리스트는 크기가 가변적으로 변하는 선형리스트의 성질을 가지고 있는 자료형이다
㉯ 리스트형 선언
- 리스트명=[요소1, 요소2, ...]
- [, ]를 이용하여 리스트형을 선언한다
㉰ 리스트형 메소드
- append(값): 리스트 마지막 요소 뒤에 값을 추가하는 메소드
- insert(인덱스, 값): 리스트의 인덱스 위치에 값을 삽입하는 메소드
- remove(값)
- 리스트에서 해당하는 값을 제거하는 메소드
- 해당하는 값이 여러 개 있을 경우 가장 앞에 있는 값을 제거
㉱ 리스트 인덱싱
- 리스트는 여러 값으로 이루어져 있는데 인덱스를 이용해서 중간값에 접근할 수 있다
- 리스트가 n개의 값을 가질 때 인덱스는 다음과 같다
첫 번째 요소 | 두 번째 요소 | ... | 뒤에서 두 번째 요소 | 마지막 요소 |
---|---|---|---|---|
0 | 1 | ... | (n-2) | (n-1) |
-n | -(n-1) | -2 | -1 |
㉲ 리스트 슬라이싱
- 리스트 슬라이싱은 리스트에서 여러 개의 데이터에 동시에 접근하는 기법이다
- 리스트명[시작_인덱스:종료_인덱스:스텝]
[시작 인덱스]
- 슬라이싱을 시작할 인덱스
- 생략할 경우 '리스트명[ : 종료_인덱스]' 또는 '리스트명[ : 종료_인덱스 : 스텝]' 형태가 됨
- 생략할 경우 처음부터 슬라이싱
[종료 인덱스]
- 슬라이싱을 종료할 인덱스
- 종료 인덱스에 있는 인덱스 전까지만 슬라이싱
- 생략할 경우 '리스트명[시작_인덱스 : ]' 또는 '리스트명[시작_인덱스 : : 스텝]' 형태가 됨
- 생략할 경우 마지막까지 슬라이싱
[스텝]
- 몇 개씩 끊어서 슬라이싱을 할지 결정하는 값
- 생략할 경우 '리스트명[시작_인덱스 : 종료_인덱스]' 또는 '리스트명[시작_인덱스 : 종료_인덱스 : ]' 형태가 됨
- 생략할 경우 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)형 개념
- 튜플형은 초기에 선언된 값에서 값을 생성, 삭제, 수정이 불가능한 형태의 자료형이다
㉯ 튜플형 선언
- 튜플명=(요소1, 요소2, ...)
- (, )를 이용하여 튜플형을 선언한다
㉰ 튜플 인덱싱
- 튜플은 여러 값으로 이루어져 있는데 인덱스를 이용해서 중간값에 접근할 수 있다
- 튜플이 n개의 값을 가질 때 인덱스는 다음과 같다
첫 번째 요소 | 두 번째 요소 | ... | 뒤에서 두 번째 요소 | 마지막 요소 |
---|---|---|---|---|
0 | 1 | ... | (n-2) | (n-1) |
-n | -(n-1) | -2 | -1 |
㉱ 튜플 슬라이싱
- 튜플 슬라이싱은 튜플에서 여러 개의 데이터에 동시에 접근하는 기법이다
- 튜플명[시작_인덱스: 끝_인덱스 : 스텝] → 시작 인덱스부터 끝 인덱스 바로 전 인덱스까지 스텝 값만큼 건너뛴 값을 접근
④ 딕셔너리형
㉮ 딕셔너리(Dictionary)형 개념
- 딕셔너리형은 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료형이다
㉯ 딕셔너리형 선언
- 딕셔너리명={키1:값1, 키2:값2, ...}
- {, } 안에 콜론(:)을 이용하여 키와 값을 구분하여 선언한다
㉰ 딕셔너리형 요소 추가
- 딕셔너리명[키]=값
- 기존 변수에 키와 값을 추가한다
- 기존 변수에 해당 키에 해당하는 값이 있었으면 값을 변경한다
㉱ 딕셔너리형 요소 삭제
- del 딕셔너리명[키]
- 기존 변수에서 해당 키와 키에 해당하는 값을 삭제한다
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으로 변경)
👉식별자
① 식별자(Identifier) 개념
- 식별자는 변수, 상수, 함수 등 서로 구분하기 위해서 사용되는 이름이다
- 프로그램의 구성요소를 구별하기 위해 사용한다
② 식별자 명명 규칙
[사용 가능 문자]
규칙 | 사용 가능 예시 | 사용 불가능 예시 |
---|---|---|
영문 대문자/소문자, 숫자, 밑줄('_')의 사용이 가능 | 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)
- 식별자 표기 시에 여러 단어가 이어지면 첫 단어 시작만 소문자로 표시하고, 각 단어의 첫 글자는 대문자로 지정하는 표기법
- ex) inputFunction
파스칼 표기법(Pascal Case)
- 식별자 표기 시에 여러 단어가 이어지면 각 단어의 첫 글자는 대문자로 지정하는 표기법
- ex) InputFunction
스네이크 표기법(Snake Case)
- 식별자 표기 시에 여러 단어가 이어지면 단어 사이에 언더바를 넣는 표기법
- ex) input_function
헝가리안 표기법(Hungarian Case)
- 식별자 표기 시 두어에 자료형을 붙이는 표기법
- 식별자 표기 시에 int형일 경우 n, char형일 경우 c, 문자열일 경우 sz를 붙임
- ex) nScore->정수형
Author And Source
이 문제에 관하여(28. [기본 문법 활용하기] 변수 활용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@y55nms/28.-기본-문법-활용하기-변수-활용저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)