아기 상어 2 문제 N×M 크기의 공간에 아기 상어 여러 마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 아기 상어가 최대 1마리 존재한다. 어떤 칸의 안전 거리는 그 칸과 가장 거리가 가까운 아기 상어와의 거리이다. 두 칸의 거리는 하나의 칸에서 다른 칸으로 가기 위해서 지나야 하는 칸의 수이고, 이동은 인접한 8방향(대각선 포함)이 가능하다. 안전거리가 가장 큰 칸을 구해보자. 입력 첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈칸, 1은 아기 상어가 있는 칸이다. 빈칸과 상어의 수가 각각 한 개 이상인 입력만 주어진다. 문제풀이 접근 방법에 대해 고민을 조금 많이 했다. 우선 모든 아기 ..
트럭 문제 강을 가로지르는 하나의 차선으로 된 다리가 하나 있다. 이 다리를 n 개의 트럭이 건너가려고 한다. 트럭의 순서는 바꿀 수 없으며, 트럭의 무게는 서로 같지 않을 수 있다. 다리 위에는 단지 w 대의 트럭만 동시에 올라갈 수 있다. 다리의 길이는 w 단위길이(unit distance)이며, 각 트럭들은 하나의 단위시간(unit time)에 하나의 단위길이만큼만 이동할 수 있다고 가정한다. 동시에 다리 위에 올라가 있는 트럭들의 무게의 합은 다리의 최대하중인 L보다 작거나 같아야 한다. 참고로, 다리 위에 완전히 올라가지 못한 트럭의 무게는 다리 위의 트럭들의 무게의 합을 계산할 때 포함하지 않는다고 가정한다. 예를 들어, 다리의 길이 w는 2, 다리의 최대하중 L은 10, 다리를 건너려는 트럭..
https://www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net 파이프 옮기기 1 문제 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 번호이고, 행과 열의 번호는 1부터 시작한다. 각각의 칸은 빈 칸이거나 벽이다. 오늘은 집 수리를 위해서 파이프 하나를 옮기려고 한다. 파이프..
poetry는 의존성 관리와 패키징을 돕는 도구이다. 너의 프로젝트의 의존성 라이브러리들의 선언을 돕고, 관리해준다. 반복적인 설치와, 배포를 위한 빌드도 돕는다. python 3.7+ 이상만 지원한다. Linux, macOS, Windows 에서 사용이 가능하다. Windows 에서의 사용법 cmd를 열어서 아래를 입력한다. pip install poetry 나는 pycharm(파이참) IDE를 이용하기 때문에 이 안에서 관리를 해볼 것이다. 1. 프로젝트 생성 2. poetry 사용 파이참 터미널에 아래를 입력한다. poetry init 그 뒤에 나오는 질문들을 읽고 바꾸고 싶은 것이 있으면 바꾸고, 아니면 그냥 엔터 연타하면 .toml 파일이 하나 생성된다. 3. 원하는 패키지 설치 poetry D..
클래스 내에 작성된 함수를 메서드(method)라고 부른다. 함수만 작성된 것은 그냥 함수라고 부른다. 보통 함수와 메서드를 구분하는 방법이다. 파이썬에서 메서드는 크게 3가지로 나뉜다. 인스턴스 메서드(instance method) 정적 메서드(static method) 클래스 메서드(class method) 인스턴스 [1] 참고 1. 인스턴스 메서드(instance method) 함수 첫 번째 인자에 클래스 객체 자기 자신을 의미하는 self 가 들어간다. 예시코드 class Test: a = 1 def __init__(self): self.b = 2 def abc(self): print("abc") print(self.a) def abcd(self): print('abcd') print(self.b..
장고 ORM을 이용하여 DB에서 데이터를 불러올 때 내가 원하는 데이터만을 가져오게 하기 위해서는 필터를 사용해야 한다. 기본적으로 model이름.objects.all()을 할 경우 해당 테이블의 모든 데이터를 가져온다. 특정한 값만 가지고 오고 싶은 경우 이렇게 하면 상당히 비효율적이다. 이때 filter를 이용하여 원하는 값만 가져올 수 있다. model이름.objects.filter() 이것을 이용하면 된다. exact - 정확히 일치하는 데이터 가져오기 iexact - 대소문자 구분 없이 정확히 일치하는 데이터 가져오기 None을 찾는 것은 Null을 찾는 것과 동일하다. model이름.objects.filter(id__exact=1) model이름.objects.filter(id__exact=N..
장고에서는 반드시 request를 매개변수로 받아온다. request는 많은 정보를 담고 있다. 우선 그냥 request를 출력해보자. # 데코레이터, csrf 토큰 검증 비활성화 @csrf_exempt def ss(request): print(request) return HttpResponse("good") 아래와 같은 출력 결과를 얻을 수 있다. WSGIRequest라는 객체가 존재하고, POST방식이고, url경로 정보가 나온다. 이번엔 GET 방식으로 요청해 보았다. 아래와 같이 쿼리까지 모두 나온다. Django가 http request를 받으면, 해당 정보들을 가지고 WSGIRequest 객체를 생성한다. 이를 view의 첫 번째 매개변수로 전달한다. 그렇기 때문에 꼭 request라고 하지 ..
Floyd-Warshall 플로이드 알고리즘, 로이-와샬 알고리즘, 로이-플로이드 알고리즘, WIFI 알고리즘 등으로 불린다. 그래프에서 최단경로를 찾는 문제를 해결하는 알고리즘의 한 종류이다. 다익스트라 알고리즘의 경우 가중치가 양수이고, 하나의 시작점으로부터 다른 모든 버텍스(vertex, node, 노드)까지의 최소 비용을 구한다. 플로이드 와샬은 이 다익스트라를 여러 번 행하여 모든 버텍스에서 다른 모든 버텍스까지의 경로를 구하는 알고리즘이다. 시간 복잡도는 O(n^3)이다. 이론적으로 이해하는 데에는 시간이 조금 걸리지만 코드는 그냥 반복문 세 개 갖다 쓰는 거라 매우 간단하다. 이론 현재 나의 위치가 i이고, j까지 가는 최단경로를 알고 싶다. i에서 j로 한 번에 가지는 경우가 최단거리 일 ..