문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 필드의 값이 `Null`인 경우, `WHERE` 또는 `IF`를 사용하여 `Null`에 대한 처리를 하면 필요에 따라 반영 여부를 결정할 수 있다. 코드 이름이 없는 동물의 아이디 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL 이름이 있는 동물의 아이디 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID NULL 처리하기 SELECT ANIMAL_TYPE, IF (N..
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 테이블에서 원하는 조건에 따라 `COUNT`, `MAX`, `MIN`을 사용하여 원하는 값을 찾을 수 있다. `SELECT`에서 이를 활용하면 쉽게 문제를 해결할 수 있다. 코드 최댓값 구하기 SELECT MAX(DATETIME) FROM ANIMAL_INS 최솟값 구하기 SELECT MIN(DATETIME) FROM ANIMAL_INS 동물 수 구하기 SELECT COUNT(*) FROM ANIMAL_INS 중복 제거하기 SELECT COUNT(DISTINCT NAME) FROM ANIMAL..
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 MySQL에서 `SELECT`를 활용하여 데이터 베이스의 다양한 레코드를 조회할 수 있다. 이때 찾고자 하는 필드를 선택하는 것은 `SELECT`를 통해 하며, `ORDER BY`, `GROUP BY`와 같은 것을 활용하여 조건에 맞게 필드들을 선택할 수 있다. 코드 모든 레코드 조회 하기 SELECT * FROM ANIMAL_INS 역순 정렬하기 SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC 아픈 동물 찾기 SELECT ANIM..
문제 1717번: 집합의 표현 첫째 줄에 n(1≤n≤1,000,000), m(1≤m≤100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 a가 �� www.acmicpc.net 문제 풀이 0부터 N까지 집합을 이룰 때, 합집합 연산과 두 원소가 같은 집합에 포함되어 있는지를 확인하고 반환하는 문제이다. 이는 `Union-Find`를 이해하고 구현하면 문제를 쉽게 해결할 수 있다. 즉, 해당 자료구조를 그대로 구현하면 문제를 풀 수 있다. 코드 from sys import stdin def find(target): if target == parent[target]: return target re..
문제 16916번: 부분 문자열 첫째 줄에 문자열 S, 둘째 줄에 문자열 P가 주어진다. 두 문자열은 빈 문자열이 아니며, 길이는 100만을 넘지 않는다. 또, 알파벳 소문자로만 이루어져 있다. www.acmicpc.net 문제 풀이 문자열 S, P가 주어질 때 P가 S의 부분 문자열인지 판단하여 결과를 반환하는 문제이다. 두 문자열의 길이는 100만 미만이므로 단순히 `print(int(p in s))`와 같이 풀게 되면 시간 초과가 발생한다. 따라서 `KMP 알고리즘`을 활용하여 필요 없는 곳의 탐색을 건너뛰도록 하여야 시간 내에 통과할 수 있다. 문제를 풀기 위해서는 `KMP 알고리즘`을 이해하고 구현하면 쉽게 해결할 수 있다. 코드 def make_table(): length = len(p) ta..
문제 6087번: 레이저 통신 크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서 www.acmicpc.net 문제 풀이 레이저와 레이저 사이의 통신을 하기 위해 최소한의 거울을 설치하여 통신이 가능하도록 하는 거울의 개수를 반환하는 문제이다. 문제를 풀기 위해서는 레이저가 방향을 바꾸지 않고 최대한 나아갈 수 있는 경우와, 방향을 바꾸는 경우를 생각하여 문제를 접근하면 다음과 같은 로직을 생각할 수 있다. BFS로 탐색을 시작한다. 방향을 바꾸지 않고 갈 수 있는 경로들을 최대한 탐색한다. 범위를 벗어나지 않거나, 벽이 아닌 경우를 말한다. 방향이 바뀌게..
문제 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모�� www.acmicpc.net 문제 풀이 이전에 다룬 안전 영역, 단지번호붙이기 문제와 같이 `Floodfil`을 활용하여, 접근 가능한 영역을 판단하고 그에 따라 처리하는 문제이다. 이 문제에서는 방문 가능한 영역에 대한 조건과 방문 후에 기존 인구에 대한 처리 부분이 추가된 문제이다. 현재 국가로부터 방문 가능한 인접 국가는 `L
문제 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 문제 풀이 문제 요구 사항에 따라 순차적으로 구현하면 맞을 수 있는 문제이다. 낚시왕이 물고기를 잡고, 상어가 움직이는 것을 순차적으로 실행하면 문제에서 요구하는 답을 찾을 수 있다. 낚시왕이 `c + 1`, 즉 열을 한 칸 이동하여 해당 열 중 가장 땅과 가까운 행의 인덱스가 낮은 상어부터 잡게 된다. 잡은 상어는 사라지게 된다. 1초 동안 상어가 이동한다. 상어는 각각 1초에 이동할 수 있는 거리를 가지게 된다. 따라서 속도가 5라면 ..