분류 전체보기 337

[DFS/BFS] 이해를 위한 기본 자료구조 및 알고리즘

꼭 필요한 자료구조 기초 탐색 : 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 - 그래프, 트리 등의 자료구조 안에서 탐색하는 문제를 자주 다룬다. - 스택과 큐, 재귀 함수에 대한 이해가 전제 되어야 DFS/BFS를 잘 활용할 수 있다. 인접 행렬 vs 인접 리스트 1. 인접 행렬 - 장점: 두 노드의 간선의 존재 여부를 바로 알 수 있다 - 단점: 모든 관계를 기록함으로 노드의 개수가 많을 수록 불필요한 메모리 낭비가 일어난다 2. 인접 리스트 - 장점: 연결된 것들만 기록하여 어떤 노드의 인접한 노드들을 바로 알 수 있다 - 단점: 두 노드가 연결되어 있는지에 대한 정보를 얻는데 속도가 느리다. 인접 행렬은 그래프에 간선이 많이 존재하는 밀집 그래프일 경우 사용 인접 리스트는 간선이 적은 희..

[구현] - 게임 개발

게임 개발 육지(0)와 바다(1)로 구성된 N x M 크기의 직사각형 공간이 있다. 캐릭터는 동서남북으로 이동이 가능하며 바다로는 이동이 불가능하다. 맵의 각 칸은 (A,B)로 나타낼 수 있고 A는 북쪽으로 떨어진 칸의 개수, B는 서쪽으로 떨어진 칸의 개수이다. 아래는 캐릭터의 움직임을 설정하기 위한 메뉴얼이다. 1. 현재 위치에서 현재방향을 기준으로 왼쪾방향(반시계방향 90도로 회전한 방향)부터 차례대로 이동 2.왼쪽 방향에 안가본 곳이 있다면 왼쪽으로 회전후 한칸 전진, 왼쪾 방향에 가보지 않은 칸이 없다면 왼쪽 방향으로 회전만하고 1단계로 돌아간다. 3.만약 네방향 모두 이미 가본칸이거나 바다로 되어있으면 바라본느 방향을 유지한채 한칸 뒤로 가고 1단계로 돌아간다. 단, 이떄 뒤쪽 방향이 바다인칸..

[구현] - 왕실의 나이트

나이트는 8 X 8 공간 밖으로는 나가지 못하며 L 자 형태로만 이동할 수 있다. 1. 수평으로 두칸 이동한 뒤 수직으로 한칸 이동하기 2. 수직으로 두칸 이동한 뒤 수평으로 한칸이동하기 행은 1~8로 표현되며 열은 a~h로 표현이 된다. 이때 행과열에 대한 정보가 주어졌을 때 나이트가 이동가능한 경우의 수를 출력하라. 입력 예시) a1 출력 예시) 2 나의 코드 col,row=(map(str,input())) col=ord(col) col=col-96 row=int(row) arr=[[0]*9 for _ in range(9)] cnt=0 dx=[-2,-2,-1,1,2,2,1,-1] dy=[-1,1,2,2,1,-1,-2,-2] for k in range(8): nx=row +dx[k] ny=col+dy[..

[구현] 시각

정수 N이 입력되면 00시 00분 00초 부터 N시 59분 59초 까지의 모든 시각중 3이 하나라도 포함 되는 경우의 수를 출력. 나의코드 N=int(input()) cnt=0 for k in range(N+1): if k==3 or k==13 or k==23: cnt+=3600 continue for i in range(60): if i %10==3 or i//10==3: cnt+=60 continue for j in range(60): if j%10==3 or j//10==3: cnt+=1 print(cnt) 우선 시간, 분, 초단위로 나누어 생각을 해 보았다. 시간 단에서 3이 포함되면 분과 초는 어떤 값이 오더라도 카운팅이 된다. 즉 60*60이 바로 카운팅이 된다. 그리고 contine를 하여 ..

[구현] 상하 좌우

N x N 크기의 정사각형 공간이 있고 가장 왼쪽 좌표는 (1,1) 가장 오른쪽 아래 좌표는 (N,N)이다. 상,하,좌,우로 이동할 수 있으며, 시작 좌표는 항상 (1,1)dlek. 이동할 계획서에는 L,R,U,D 중 하나의 문자가 반복적으로 적혀 있다. L : 왼쪽으로 한칸 이동 R : 오른쪽으로 한칸이동 U : 위로 한칸 이동 D : 아래로 한칸 이동 단, 이동 명령이 공간을 벗어나는 명령이 오면 무시한다. ex) (1,1)에 있다가 L 혹은 U를 명령하는 경우 명령어를 모두 수행한 후 현재 좌표를 출력 하시오. 입력 조건 ) 첫째 줄에 공간의 크기를 나타내는 N이 주어진다 둘쨰 줄에 계획서의 명령이 주어진다. 입력 예시) 5 R R R U D D 출력 예시) 3 4 나의 코드 N=int(input(..

[구현] 아이디어를 코드로 바꾸는 구현

피지컬로 승부하기 - 구현이란 '머리속에 있는 알고리즘을 소스코르도 바꾸는 과정'이다 - 구현 유형의 문제는 ' 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제' 이다 - 구현하기 어려운 문제란 ? 1. 알고리즘은 간단하지만 코드가 지나치게 길어지는 문제 2. 특정 소수점 자리 까지 출력하는 문제 3.문자열이 이볅으로 주어졌을 때 한문자 단위로 끊어서(파싱하여) 리스트에 넣어야 하는 문제 - 사용 언어의 문법을 잘 이해하고 라이브러리 사용 경험이 많아야 한다. ex) N개의 원소중 R 개를 골라 리스트에 저장 하는 경우 - 반복목으로 기능을 전부 작성할 수 있지만 itertools같은 표준 라이브러리로 쉽게 짤수 있다 - 현 교재에서는 '완전 탐색', '시물레이션' 유형을 '구현' 유형으로 묶..

[그리디] - 1이 될 때까지

1이 될 때 까지 어떠한 수 N,K가 입력이 들어오면 두가지의 연산을 통해 N의 값을 1로 만드는 과정 중 연산의 최소 횟수를 구하는 문제. 단, 두번째 연산은 N이 K로 나누어 떨어 질때만 선택할 수 있다. 1. N에서 1을 뺀다. 2. N을 K 로 나눈다. 나의 코드 n,k=map(int,input().split()) cnt =0 while n!=1: if n%k==0: n=n//k cnt+=1 else: n=n-1 cnt+=1 print(cnt) '최소 회수' 라는 단어에서 그리디 알고리즘을 떠올렸다. 또한 두가지 연상 종류 중 뺴기 보단 나누기가 횟수를 줄이는데 효과가 좋다. 우선 2번 연산이 가능한지(n이k로 나누어 지는지) 확인 후 가능하면 2번을 하고 2번 연산이 안되면 1번 연산을 한다. ..

[그리디] 숫자 카드 게임

숫자 카드 게임 가장 높은 숫자를 뽑는 게임. - NxM형태로 놓여있으며 N은 행 M 은 열을 뜻한다. - 먼저 행을 선택한다 - 그 다음 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑는다. 입력 예시) 3 3 3 1 2 4 1 4 2 2 2 출력 예시) 2 입력 예시) 2 4 7 3 1 8 3 3 3 4 출력 예시) 3 나의 코드 n,m=map(int, input().split()) arr=[list(map(int,input().split())) for _ in range(n)] res=[0]*n for i in range(n): res[i]=min(arr[i]) print(max(res)) 가장 높은 숫자와 가장 낮은 숫자 라는 단어가 보여 바로 그리디임을 직감했다. 또한 결국 출력 값은 '모든..

[그리디] - 큰수의 법칙

큰수의 법칙 - 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰수를 만드는 법칙 - 단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없다. - 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른것으로 간주 입력 예시) 5 8 3 2 4 5 4 6 출력 예시) 46 나의 코드 n,m,k=map(int,input().split()) arr=list(map(int,input().split())) arr.sort(reverse=True) s=0 cnt=0 while True: for _ in range(k): if cnt==m: print(s) break s+=arr[0] cnt+=1 if cnt==m: print(s) break s+=arr[..

Next12 vs Next13 렌더링 차이점[서버 컴포넌트, 클라이언트 컴포넌트]

Next12페이지 단위로 렌더링 방식을 규정.getStaticProps(). SSG,ISR ==> 얼마나 자주 업데이트(할것인지)getServerSideProps()  Next13 페이지 단위가 아니라 컴포넌트 단위로 렌더링 방식을 규정한다.즉,  아래 사진과 같이 한 페이지 안에서 기능별로 클라이언트 컴포넌트와 서버 컴포넌트를 둘다 사용할 수 있다.(기본적으로 모두 서버컴포넌트이다) 서버 컴포넌트(서버에서 빌드가 될때 실행되는 컴포넌트)브라우저에서 제공하는 api 는 사용할 수 없고 node api를 사용해야 한다.useState같은 상태 관련 로직을 사용할 수 없다.   사용자의 상호작용이 필요한 부분만 컴포넌트로 만들고 그걸 모아서 하나의 서버 컴포넌트로 만드는 것이 중요한다.    서버 사이드 렌..