728x90

전체 글 270

백준 2579 <계단 오르기> Python

https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net def solution(N, data_list): # memo 와 자릿수 맞추기 data_list = [0] + data_list # DP # 2 까지는 미리 채우기 memo = [0 for _ in range(N+1)] memo[1] = data_list[1] # N 이 1이면 if N == 1: return memo[1] memo[2] = memo[1] + data_list[2] # N 이 2면 if N ..

백준 1149 <RGB 거리> Python

https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 전형적인 DP 기본 문제입니다. 하지만 처음 선택한 색에 따라 최솟값이 달라지므로 시작이 다른 세 가지 경우 모두 값을 계산해보고 그 중 최솟값을 출력해야 합니다. def solution(N, data_list): # 인덱스 맞추기 data_list = [[0, 0, 0, 0]] + data_list # 시스템 상 최댓값 inf = 1000001 # 2차원 DP # 첫 선택에..

메모리 구조

메모리 구조 개념 프로그램이 실행되기 위해서는 프로그램이 메모리에 로드되어야 합니다. 또 프로그램에서 사용되는 변수들을 저장할 메모리도 필요합니다. 이를 위해 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공합니다. 대표적인 메모리 공간은 네 영역으로 나눌 수 있습니다. 코드(code) 영역 데이터(data) 영역 스택(stack) 영역 힙(heap) 영역 이 영역을 그림으로 표현하면 오른쪽과 같습니다. 코드 영역 코드 영역은 실행할 프로그램의 코드가 저장되는 영역입니다. 또 텍스트 영역이라고도 부릅니다. 코드 역역에 저장된 명령어는 CPU 에 의해 하나씩 처리됩니다. 데이터 영역 데이터 영역은 프로그램의 전역 변수와 정적 변수가 저장되는 영역입니다. 프로그램의 시작시 할당되며, 프로..

백준 1463 <1로 만들기> Python

https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net DP 알고리즘의 전형적인 문제입니다. 어떤 조건에서 이전 단계와 다음 단계를 연결할 수 있는지 생각하면 쉽게 풀 수 있습니다. def solution(N): # 앞에서부터 메모 memo = [-1 for _ in range(N+1)] # 앞에 1 은 자체니까 0 memo[1] = 0 i = 2 while True: # 정지 조건 if i > N: return memo[-1] # 가능 목록 # 3으로 나눠지면 3으로 나눈 인덱스 # 2로 나눠지면 2로 나눈 인덱스 # 1보다 크면 1을 뺀 인덱스 candid_li..

백준 9095 <1, 2, 3 더하기> Python

https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net DP 문제의 전형적인 케이스로 점화식만 찾는다면 쉬운 문제입니다. 맨 앞에 올 수를 고정시킨다는 느낌으로 생각하면 쉽게 구할 수 있습니다. def solution(n_list): # 하나씩 받으면 다시 계산해야 하니까 리스로 받아서 계산하자 # 리스트 최댓값 target = max(n_list) # 메모 memo = [0 for _ in range(target+1)] # 인덱스 0 은 자신을 더해주는 개념이므로 1 배정 memo[0] = 1 # 인덱스 1 은 하나뿐이므로 미리 작성 memo[1]..

RESTful api

RESTful api 개념 RE presentational S tate T ransfer 의 약자로 api 작동 방식에 대한 소프트웨어 아키텍쳐입니다. 즉 네트워크 상태의 전이에 대한 표현입니다. 일반적으로 Resource(URI), Method(GET, POST 등), Representation of Resource(데이터의 표현 방식, JSON, XML 등) 을 통해 상태를 표현한다면 우리는 RESTful 한 api 를 작성했다고 말 합니다. 규칙 REST 아키텍쳐는 몇 가지 규칙이 있습니다. 균일한 인터페이스 서버가 표준 형식으로 정보를 전송하는가 에 관한 문제입니다. 예를 들어 서버는 데이터를 텍스트로 저장하고 HTML 형식으로 전송할 수 있습니다. 요청은 리소스를 식별해야 합니다. 이를 위해 균..

백준 14503 <로봇 청소기> Python

https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽 www.acmicpc.net 그래프 탐색 문제지만 구현 능력이 조금 필요했습니다. 단순히 이동만 신경쓰는게 아닌 방향이라는 요소가 추가되어 조금 까다롭지만 결국 이 요소만 해결하면 쉽게 해결할 수 있는 문제였습니다. def solution(N, M, r, c, d, data_list): # 움직임 가이드 guide_x = [0, 1, 0, -1, 0, 1, 0, -1, 0] ..

백준 9205 <맥주 마시면서 걸어가기> Python

https://www.acmicpc.net/problem/9205 9205번: 맥주 마시면서 걸어가기 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. www.acmicpc.net 전형적인 그래프 탐색 문제입니다. 다만 DFS 로 풀었다 시간초과가 발생해서 BFS 로 풀었습니다. from collections import deque def solution(n, field): # 맵 정리 start, field = field[0], field[1:] # BFS 로 풀거 que = deque([start]) # 방문 기록 visited = [1 for _ in range(..

프레임워크 Vs 라이브러리

프레임 워크 개념 프레임 워크는 이름에서 볼 수 있듯 개발을 하기 위한 프레임, 뼈대를 제공해줍니다. 전체 동작 방식은 프레임워크가 제공하고 우리는 프레임워크의 일정 부분만 개발하는 것으로 프로그램을 만들 수 있습니다. 굳이 표현하자면 독립을 해서 집을 구했는데 매매가 아닌 전세로 들어가는 것과 비슷하다고 보면 됩니다. 통제권은 집주인이 쥐고 있어 집에 소파를 놓거나 티비를 놓는 작업은 마음대로 할 수 있지만, 베란다를 터서 방을 넓힌다거나 벽을 허물고 창문을 설치하는 등의 행위는 할 수 없는 느낌입니다. 즉 통제권은 프레임워크가 쥐고 있고 우리는 허용범위 내에서만 코드를 작성할 수 있습니다. 원래는 프로그래머가 가지고 있던 객체의 제어를 프레임 워크가 대신 해준다는 의미로 제어역전 이라는 용어를 사용하..

백준 2573 <빙산> Python

https://www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 단순한 그래프 탐색 문제지만 추가 작업이 필요하다. 탐색을 하면서 빙산을 녹여주며 덩어리의 수를 찾는 작업을 반복하면 된다. 탐색 -> BFS 와 녹이는 작업 같이 -> 덩어리 수 카운트 import copy def solution(N, M, field): # 소요 시간 year = 0 while True: # 덩어리 수 cnt = 0 # 방문 기록 visited = [[1 if field[..

728x90