알고리즘 문제풀이 9655. 돌 게임 돌이 3개 이하인 경우에는 1개씩 밖에 못가져감 그렇기 때문에 1일 때는 SK가, 2일때는 CY가 승리 돌의 개수가 홀수일때는 먼저 하는 사람이 이김(SK), 짝수일 경우 뒤에 하는 사람이 이김(CY) import sys input = sys.stdin.readline n = int(input()) if n < 3: if n == 1: print("SK") elif n == 2: print("CY") elif n % 2 == 1: print("SK") elif n % 2 == 0: print("CY") 2839. 설탕 배달 5로 나뉘어질 때까지 3을 빼고 카운트 1개 증가 5와 3으로 나누어 떨어지지 않는 경우에는 -1 출력 import sys input = sys...
728x90
반응형
전체 글
어셈블리어 기본 문법 대표적인 명령어(Instruction) MOV: A의 값을 B의 값으로 옮깁니다. MOV EAX, 100은 EAX에 100이라는 값을 넣습니다. 다만 구체적인 연산을 포함할 수 없습니다. LEA: A의 값을 B의 값으로 연산을 포함하여 복사합니다. LEA EAX, [EAX + 1000]은 EAX에 1000을 넣은 값을 다시 EAX에 삽입합니다. 이처럼 연산을 포함할 수 있습니다. JMP: 특정한 위치로 건너 뛰어 코드를 실행합니다. JMP A라고 하면 A의 위치로 뛰어서 코드가 실행됩니다. 비슷하게 조건 점프 명령도 존재합니다. JA, JB, JE 등의 명령어는 두 인자를 받아서 비교한 뒤에 결과에 따라서 다른 방향으로 점프할 수 있습니다. CALL: 함수를 호출했다가 다시 원래 위..
스택과 레지스터 스택(stack) 프로시저 호출 시 지역변수와 매개변수를 저장하기 위한 메모리 공간 선언되는 순서와 반대로 메모리가 해제되는 LIFO(LastInFirstOut)구조용도 함수의 로컬 변수 저장 : 각 함수 호출 시 그 함수의 로컬 변수들이 스택에 저장 함수의 제어흐름 관리 : 함수가 다른 함수를 호출할 때, 반환주소와 이전함수의 스택프레임 정보가 스택에 저장장점 동적으로 메모리를 할당하고 해제할 수 있음 구현이 간단하며, 메모리 관리 overhead가 낮음 레지스터(register) 프로세서 내부의 고속작동 메모리로, 프로시저 실행 중. 자주 접근하는 변수나 중간 계산값을 저장하기 위해 사용 용도 중간 연산결과의 저장 : 연산 중 생성되는 중간 값을 빠르게 저장하고 접근하기 위해 사용 빠..
3.7 프로시저 프로시저 호출은 소프트웨어에서의 주요 추상화 인자를 받을 수 있고 값을 리턴할 수 있는 코드 블럭(특정 기능이 구현된)의 추상화 함수, 메소드, 서브 루틴, 핸들러 등으로 사용 특징 프로시저가 다른 프로시저를 호출하고 리턴하는 일련의 동작은 다음과 같은 특징을 하나 이상 가질 수 있음 제어권 전달 프로그램 카운터(pc)는 호출되는 프로시저에 대한 코드의 시작주소로 설정 리턴할 때는 호출 인스트럭션 다음의 인스트럭션으로 설정 데이터 전달 호출자는 하나 이상의 매개변수를 피호출자에 제공할 수 있어야 함 피호출자는 호출자에게 하나의 값을 리턴할 수 있어야 함 메모리 할당과 반납 피호출자는 지역변수를 위한 공간을 할당할 수 있음 리턴할 때 이 공간을 반납할 수 있음 3.7.1 런타임 스택 3.7..
3.4.4 스택 데이터의 저장과 추출 스택(Stack) 스택은 프로시저 호출을 처리하는 데 중요한 역할 후입선출(Last In, First Out / LIFO) 형태로 추가, 제거되는 구조 제거하는 값이 가장 최근에 추가된 값 push : 데이터 추가 pop : 데이터 제거 스택은 탑(top) 원소가 모든 스택 원소 중에서 가장 낮은 주소를 갖는 형태 스택은 아래 방향으로 성장 스택 포인터(%rsp)는 스택 맨 위 원소(top)의 주소를 저장 pushq, popq 인스트럭션은 한개의 오퍼랜드를 사용 추가할 소스 데이터와 추출을 위한 데이터 목적지 # 쿼드워드 값을 스택에 추가하는 과정(push) subq $8,%rsp # 스택 포인터를 8만큼 감소 movq %rbp,(%rsp) # 쿼드워드를 새로운 탑에..
3.4 정보 접근하기 x86_64 CPU는 64비트 값을 저장할 수 있는 16개의 범용 레지스터를 보유 레지스터는 정수 데이터와 포인터를 저장 3.4.1 오퍼랜드 식별자 인스트럭션은 하나 이상의 오퍼랜드를 가짐 연산을 수행할 소스값과 그 결과를 저장할 목적지의 위치를 명시 결과값은 레지스터나 메모리에 저장 타입(Type) 상수(immediate) -> ‘$’ 기호 다음에 C 표준서식을 사용하는 정수 레지스터(register) -> 레지스터의 내용 메모리 참조 -> 유효 주소(effective address)에 의해 메모리 위치에 접근 일반적인 형태 Imm + R[rb] + R[ri]*s Imm : 상수 오프셋 rb : 베이스 레지스터 (64비트) ri : 인덱스 레지스터 (64비트) s : 배율 (1, ..
다이나믹 프로그래밍(DP : Dynamic Programming) 동적 계획법 목적 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장 한 번 해결한 문제는 다시 해결하지 않음 메모리를 사용해서 중복 연산을 줄임 배열 or 자료구조를 만듬 중복 연산을 줄여서 수행 속도를 개선 연산한 결과를 배열에 담음 기억하며 풀기(기억하기 알고리즘) 판단 기준 최적 부분 구조(Optimal Substructure) 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있음 중복되는 부분 문제(Overlapping Substructure) 동일한 작은 문제를 반복적으로 해결 방식 탑 다운(Top-Down) : 하향식 -> 재귀로 구현 메모이제이션(Memoization) : 한 번 ..
728x90
반응형