Skip to content

Latest commit

 

History

History
145 lines (122 loc) · 3.46 KB

정처기 코딩유형.md

File metadata and controls

145 lines (122 loc) · 3.46 KB

코딩 유형 정리

포인터

ex)

#include <stdio.h>
int main(){
        char *p = "KOREA";
        printf("%s \n", p);
        printf("%s \n", p+3);
        printf("%c \n", *p);
        printf("%c \n", *(p+3));
        printf("%c ", *p+2);
 }

포인터 p 출력
KOREA

포인터 p에 저장된 값에 3을 더한후 출력
EA

포인터 p가 가리키고 있는 주소 영역에 접근하여 값을 가져와 출력
K

포인터 p에 저장된값에 3을 더한후 해당 값이 가리키고 있는 주소 영역 출력
E

포인터 p의 값인 K에서 알파벳상 +2해준 값을 출력 -> K L M
M

int ary[3];
int s = 0;
*(ary+0) = 1;
ary[1] = *(ary+0) +2;
ary[2] = *ary +3;
for(int i=0; i<3; i++) {
	s * s + ary[i];
}
printf("%d",s);

arr[0] = *(arr+0) 으로 표기 가능
즉 *(ary+0) = 1은 첫번째 배열 자리에 1을 대입한다는 소리
*(ary+0) +2 = 1 + 2 = 3 -> 3이 두번째 배열에 들어간다.
*ary = *(ary+0) 과 같다 즉 첫번째 값을 의미 = 1
1 + 3 = ary[2]이다.
ary[3] = 1 , 3 , 4 이므로
정답 = 8


JAVA

자바 : 상속, 재귀 함수

ex)

class Parent {
    int compute(int num) {
        if(num <= 1) 
            return num;
        return compute(num-1) + compute(num-2);
    }
 }

 class Child extends Parent {
    int compute(int num) {
        if(num <= 1) 
            return num;
        return compute(num-1) + compute(num-3);
    }
 }

 public class Gisafirst {
    public static void main(String[] args) {
        Parent obj = new Child();
        System.out.print(obj.compute(4));
    }
 }

class A extends B = 클래스A를 선언하면서 부모 클래스로 B를 지정함으로써 B에 속하는 변수와 메소드 사용 가능
Parent obj = new Child();
자식(하위) 클래스로 객체 obj 를 생성하고 자료형은 부모(상위) 클래스로 지정
obj.compute(4) = 클래스 Child의 함수 compute 호출
compute(3) + compute(1) -> compute(2) + compute(0) + compute(1) ->
compute(1) + compute(-1) + compute(0) + compute(1) = 1 + -1 + 0 + 1 = 1
정답 = 1

자바 : 반복문

for(int i : x)

위 구문은 i를 x번 만큼 반복시킨다는 뜻


파이썬

2차원 리스트

lol = [[1,2,3], [4,5], [6,7,8,9]]
 for sub in lol:
    for item in sub:
	    print(item, end=" ")
    print()

for sub in lol = 이차원 리스트 lol의 원소를 sub에 차례차례 대입
-> 리스트를 정수로 변환

add remove update

파이썬의 add는 중복이 존재 하지 않는다.
update 또한 중복이 될 수 없다.
순서 또한 어떻게 출력이 되든 상관없다.

비트 연산자

num = 100
res = 0
for i in range(1,3);
	res = num >> i
	res = res+1
print(res)

for i in range(1,3) = 1부터 (3-1)값까지 반복 즉 2번 반복
비트 연산자 >> = 왼쪽값을 오른쪽값 만큼 오른쪽으로 shift해준값을 의미
100의 2진수값 01100100 을 한칸 오른쪽으로 00110010
00110010 = 50 , res+1 -> 51
하지만 반복문에서 i = 2이므로 두칸 shift 00011001 00011001을 10진수화 = 25
25 + 1 = 26


switch ~ case

break 문이 있으면 switch문을 빠져 나간다.
하지만 break문이 없으면 일치하는 실행문부터 모든 문장을 실행한다.
정답 =
1 2 3
4 5
6 7 8 9

while()문

while 문에서 if문을 충족시키면서 continue가 존재하면 다시 while문으로 돌아간다.