링크: https://school.programmers.co.kr/learn/courses/30/lessons/250125 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 DFS에서 사용한 로직을 그대로 쓰면 될 것 같다. 4방향을 가리킬 배열 dy, dx를 만들어 반복문을 돌려 탐색 범위를 벗어나는 좌표인지 판단 후 벗어나지 않으면 원본과 비슷한지 확인한다. 원본과 같으면 answer + 1 코드 def solution(board, h, w): dy = [0,-1,0,1] dx = [-1,0,1,0] answer = 0 for i in range..
디자인 패턴이란? 디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책이다. 이는 코드에서 반복되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는 미리 만들어진청사진과 비슷하다. 청사진(靑寫眞) 또는 블루프린트(영어: blueprint)는 아키텍처 또는 공학 설계를 문서화한 기술 도면을 인화로 복사하거나 복사한 도면을 말한다. 은유적으로 "청사진"이라는 용어는 어떠한 자세한 계획을 일컫는 데에 쓰인다. -위키백과- 표준화된 라이브러리들이나 함수들을 복사해 사용하는 것처럼 패턴들을 붙여넣기 식으로는 사용할 수는 없다. 왜냐하면 패턴은 재사용할 수 있는 코드 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 일반적인 개념이기 때문이다. 패턴은 알고리즘과 자주 혼동된다. 두..
Smart Parking Project 프로젝트를 진행 중 나중에 유용하다 싶은 내용을 기록합니다. 환경 세팅pip install super-gradients pip install opencv-python 라이브러리 및 GPU 설정 - (GPU 사용이 불가할 경우 CPU로 우회)import cv2 import torch from super_gradients.training import models device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") print(device) use_cuda = torch.cuda.is_available() print(use_cuda) if use_cuda: print(torch.cuda.get_d..
링크: https://www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 아이디어 물이 새는 곳 리스트를 돌며 처음것과 다음것의 차를 구하여 저장 -> tmp 그 값이 L보다 작으면 L-tmp를 하여 저장 -> L1 계속 돌며 L1-tmp를 하다가 tmp가 L1보다 더 커지는 경우 테이프를 하나 더 가져와야 함 cnt += 1 반복문이 끝날 때까지 계 구현 import sys input = sys.stdin.readline N, L = map(i..
링크: https://www.acmicpc.net/problem/21736 21736번: 헌내기는 친구가 필요해 2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고 www.acmicpc.net 아이디어 I의 좌표를 찾고 그 지점부터 BFS진행 P를 만나면 cnt +1 X가 아닌 부분을 만나면 X로 바꿔주고(방문처리) 큐에 좌표를 넣어준다. BFS탐색이 끝난 후 cnt값을 return return된 값이 0이면 TT 아니면 값 그대로 출력 구현 import sys input = sys.stdin.readline from collections import deque dy..
링크: https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 아이디어 백트래킹으로 요소를 선택하며 합한 수를 tmp에 저장 tmp가 s와 같아지면 cnt + 1 백트래킹 함수의 인자로 현재 더한 요소 인덱스+1로 넘겨주어 그다음 요소부터 선택하게 설계 구현 import sys input = sys.stdin.readline def back(idx): global tmp, cnt if tmp == s: cnt += ..
링크: https://www.acmicpc.net/problem/15657 15657번: N과 M (8) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 아이디어 백트래킹을 이용해 고르는 경우의 수를 찾자 m개가 골라졌을 때 고른 수를 print하고 return 백트래킹의 인자로 고른 수의 인덱스 번호를 넘겨주어 그 인덱스 번호부터 n번째 수 사이에서 또 선택하게 설계 위 논리를 적용하는 이유는 비 내림차순으로 하기 위함이니 입력받은 수를 오름차순 정렬해주어 백트래킹 시작 구현 import sys def back(inx): if l..
재귀함수란? 자기 자신을 호출하는 함수로 팩토리얼 하노이 탑 등 동일한 작업을 반복해서 수행하는 문제엣 많이 사용됨. 재귀함수의 장점 직관적인 모습으로 간단히 구현가능 DFS, 백트래킹, 그리디 등 많은 알고리즘에서 사용되어 꼭 알아두어야 할 개념 재귀함수의 단점 종료 조건을 명시해주지 않으면 무한루프에 빠질 수 있음. 깊이가 너무 깊어지면 ( 너무 많은 반복호출 ) 많은 메모리를 차지한다. 불필요한 연산을 할 가능성이 있음. Python 에서의 재귀 파이썬에서 재귀의 깊이는 1000회라는 제한이 있다. def hello(): print('Hello, world!') hello() hello() 그래서 위 코드를 실행시키면 Hello world! 라는 문자열이 계속 출력되다 에러가 발생한다. 위에서 말한..
링크: https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 아이디어 dp를 이용해서 풀면 될거라고 바로 보임 왼쪽의 스티커부터 선택해 나가 dp배열을 채워나가보자 예제에서 보자 왠쪽부터 dp 배열을 만들어 간다고 하면 첫줄은 50과 30이 그대로 들어간다. 이제 두번째 줄은 대각으로 더한 값이 가장 큰 코스트가 되는 경우니 둘을 더한 값을 dp에 저장한다. 이렇게 셋팅이 됐다면 점화식이 들어가면 된다. (0,2) 좌표의 스티커가 선택되는..