https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 보통의 미로탐색의 경우 아래 코드와 같이 BFS(너비우선탐색, 아직 모른다 하더라도)를 사용하여 푸는데 검색가능 노드를 찾아 가능한 노드를 q에 쌓으며 해당 q의 유무에 따라 while문을 반복하여 움직인다. from collections import deque N, M = map(int, input().split()) graph = [] for _ in range(N): graph.append(list(map(int, inpu..
설계 조건에 대해 말해보겠다. 순환 알고리즘을 만들기에 앞서 이전에 배운 조건문을 기억하는가? 1. 적어도 하나의 Base Case를 통해 무한루프되지 않고 종료되는 Case가 있어야한다. 결과적으로 모든 Case는 Base Case로 수렴해야한다. 2. 암시적 매개변수를 명시적 매개변수로 바꿔야한다. 이 함수의 미션은 data[0]에서 data[n-1] 사이에 target 을 검색하는 것이다. 하지만 검색 구간의 시작 인덱스 0 은 보통 생략한다. 즉 암시적 매개변수다. def search(dataA,target): for i in range(len(dataA)): if dataA[i] == target: return i print(search([1,2,3],3)) 이 함수의 목적은 data[begin..
프로그래밍은 객체들간의 상호작용이라고 말할 수 있지만 Recursion은 프로그래밍을 보는 또다른 관점으로 볼 수도 있다. 이는 무엇을 의미하는가? Recursion이 수학함수 계산에만 유용한가에 대한 것이다. 재귀는 수학 함수뿐만 아니라 다른 많은 문제들을 재귀로 해결할 수 있다. 예시로 문자열 길이 계산을 보겠다. 일반적으로 문자열의 길이를 계산한다면 for와 while문 같은 반복문을 통해 하나씩 찾아보고 길이를 계산할 수도있다. 그러나 만약 재귀로 표현하게 된다면 논리적으로 위와 같이 표현된다. 첫번쨰 문자열이 존재하지 않다면 애초에 문자열이 길이가 0인 것이고, 그렇지 않다면 현재 문자 + 남은 문자열의 길이로 계산하는 것이다. 파이썬으로 이것을 구현해보겠다. def howLongString(t..
재귀란? 자기 자신을 다시 부르는 메서드를 재귀라고한다. 아래와 같이 자신을 다시 호출하는 함수 또한 재귀인데 실행하게 된다면 def hi(): print("hi") hi() hi() hi라는 문자열이 무한히 출력된다. (물론 어느정도 출력되면 알아서 멈춘다) 그렇다면 재귀는 항상 무한 루프로 계속 자기자신을 호출해야만 할까? 그건 아니다! 어느 조건에 따라서 해당 함수를 return으로 멈춰주면 무한루프에 빠지지 않게된다. def hi(n): if n 1 이 식을 우리가 파이썬으로 구현하게 된다면 아래와 같다. def fibonacci(n): if n m : n , m = m, n # 다른 함수에서는 tmp라는 임의의 변수가 필요하지만 파이썬은 그렇지 않다. if (m %n == 0): return n..
set-cookie : 서버에서 클라이언트로 쿠키 전달(응답) cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달 쿠키 미사용시 홍길동이라는 user로 넘겼지만 다시 해당 사이트로 돌아가면 다음과 같이 다시 손님으로 받아드려진다. 서버 입장에서는 클라이언트가 홍길동인지 손님인지 구분할 수 있는 증명서가 없다... HTTP는 무상태 프로토콜이기 때문에 새로 요청시 이전 요청을 기억하지 않는다. 그렇기에 다시금 손님으로 받아드려지는 것이다! 그럼? 모든 요청에 사용자 정보를 포함해서 보낼까? 모오든 링크에다가 사용자 정보를 넣어줘야한다... 이건 너무 보안에 취약하고,, 브라우저를 완전히 종료하고 다시 열면 또 로그인을 해줘야한다..! 그렇기에 우린 쿠키를 사용한다. 클..
우리가 웹 사이트를 만들 때 해당 사이트를 시연하더라도 오류가 뜰 때가 정말정말 많다. 그렇다면 해당 오류코드를 보여주는 숫자를 우린 알고있어야하기에 해당 코드를 대략적으로 정리했다. 1xx (informational) : 요청이 수신되어 처리중 / 거의 사용 x 2xx (successful) : 요청 정상 처리 3xx(Redirection) : 요청을 완료하면 추가 행동이 필요 / 4xx(client Error): 클라이언트오류, 잘못된 문법으로 서버가 요청을 수행할 수 없음 5xx(sever Error) : 서버오류, 서버가 정상 요청을 처리하지 못함 2xx - 성공 200 = OK 201 = created , 요청 성공해서 새로운 리소스가 생성됨 202 = Accepted , 요청이 접수되었으나 처..
GET - 쿼리 파라미터를 통한 데이터 전송(주로 정렬 필터, 검색어) POST,PUT,PATCH - 메시지 바디를 통한 데이터 전송 ( 회원가입, 상품 주문, 리소스 등록, 리소스변경) 4가지 상황 1. 정적 데이터 조회 (이미지, 정적 텍스트 문서) 2. 동적 데이터 조회( 주로 검색, 정렬필터) 3. HTML Form을 통한 데이터 전송 (회원가입, 상품 주문, 데이터 변경) 4. HTML API를 통한 데이터 전송 ( 회원가입, 상품 주문, 데이터변경 ++ 서버 에서 서버로 전송, 앱 클라이언트, 웹 클라이언트(ajax)- 이 녀석을 주로 사용할 것이다. ) 정적 데이터 조회 - GET 사용 , 클라이언트에서 서버로 URI 경로만 보내 해당 결과를 보낼 뿐이다. 추가 데이터 필요 x 동적 데이터 ..
HTTP 메서드의 종류에 대해 알아보자 GET : 리소스 조회 POST : 요청 데이터 처리, 주로 등록에 사용 PUT : 리소스를 대체, 해당 리소스가 없으면 생성 PATCH : 리소스 부분 변경 DELETE : 리소스 삭제 다른 종류로는 HEAD, OPTIONS, CONNECT, TRACE 등이 있다. 본격적으로 주요 메서들에 대해 알아보자 GET이란? 리소스를 조회를 위해 사용 서버에 전달하고 싶은 데이터는 query를 통해서 전달하고 메시지 바디를 사용하여 데이터 전달이 가능하지만, 지원하지 않는 곳이 많아서 권장하지 않는다. POST이란? 요청 데이터를 처리를 위해 사용 메시지 바디를 통해 서버로 요청 데이터를 전달한다. 서버는 요청 데이터를 처리하고 메시지 바디를 통해 들어온 데이터를 처리하는..