공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍 213

[Python] 백준 19236. 청소년 상어

https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net DFS 문제. 두 달 정도 쉬었더니, 그새 구현방법을 다 까먹어서 엄청 버벅댔다. 잘 만든 코드는 아니니까, 나중에 더 세련된 방법으로 다시 풀어봐야겠다...

[Python] 백준 17144. 미세먼지 안녕!

https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 시뮬레이션 문제. pypy3으로는 통과하지만 Python3으로는 시간초과가 나는데, Python3 통과코드를 보고 어떻게 수정해봐도 내 코드는 더 이상 최적화가 안 된다. 왜지..?

[Python] 프로그래머스. 2019 카카오 recruit - 블록 게임 (Level 4)

https://programmers.co.kr/learn/courses/30/lessons/42894 코딩테스트 연습 - 블록 게임 [[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,4,0,0,0],[0,0,0,0,0,4,4,0,0,0],[0,0,0,0,3,0,4,0,0,0],[0,0,0,2,3,0,0,0,5,5],[1,2,2,2,3,3,0,0,0,5],[1,1,1,0,0,0,0,0,0,5]] 2 programmers.co.kr 구현까지 시간이 오래 걸렸던 문제. 검은 블록을 채울 수 있는 모든 공간에 검은 블록을 채우고, 검은 블록과 설치된 블록을 합쳤을 때 직사각형 블록..

[Python] 백준 11003. 최솟값 찾기

11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net 슬라이딩 윈도우 문제. 매번 윈도우 위치를 변경할 때마다 min함수를 사용할 경우, 시간복잡도가 O(n**2)가 된다. deque를 활용해 삽입/삭제를 빠르게 수행하되, deque에 값을 저장하는 방식을 약간 변경하면 효율적으로 연산을 수행할 수 있다. 아래 풀이에서 더 상세한 해설을 볼 수 있다. 백준 11003번 문제 (최솟값 찾기) with Java · 쾌락코딩 백준 11003번 문제 (최솟값 찾기) with Java 03 D..

[Python] 프로그래머스. 소수 만들기 (Level 2)

https://programmers.co.kr/learn/courses/30/lessons/12977 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. combinations으로 숫자 세 개 뽑기 2. 뽑은 세 개의 숫자를 합한 값이 소수인지 판별하기.

[Python] 프로그래머스. 점프와 순간이동 (Level 2)

https://programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 현재 위치부터 0까지 도달하는 방법을 역산하면 간단히 식을 도출할 수 있는 문제. 이전 위치 * 2로 현재 위치에 도달할 수 있으면 건전지 사용이 필요없다. 즉, 현재 위치 % 2 == 0이면 건전지 사용 없이 위치에 도달할 수 있다. 만약 현재 위치 % 2 != 0이라면, 현재 위치 % 2가 0이 될 수 있도록 1을 빼준다. 문제의 예시 5000은 5000 -> 2500 -> 1250 -> 625 -> 62..