13458 - 시험 감독
·
백준
문제 https://www.acmicpc.net/problem/13458 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 풀이 dp로 풀었다. 우선 총 감독관이 커버할 수 있는 경우는 모두 1명으로 초기화 했고, 이후에 +c명까지 부감독관 한명씩 늘려주면 된다. 범위 체크만 잘해서 입력값의 한계까지 구한다음, dp배열에 접근하여 값만 더해주면 된다. 코드 from sys import stdin n = int(input()) a = list(map(int,..
13460 - 구슬 탈출 2
·
백준
문제 https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 풀이 아무리봐도 너무 삽질처럼 푼 거 같아 풀이이후에 검색해보니 대부분 bfs 방식으로 문제를 풀었더라. 나만 dfs로 하드하게 풀었다... 나 같은 경우에는 이동하기전에 이동경로에 다른 볼이 있는지 먼저 검사했다. B...R.. 같은 경우나 BR.. 같은 경우등을 고려한 조건이었고, 빨간 구슬을 기준으로 경로에 파란 구슬이 있다면, 파란 구..
17144 - 미세먼지 안녕!
·
백준
문제 https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 풀이 열심히 열심히 구현하면 되는 문제다. 먼지 확산관련해서 조금 헷갈렸는데, 확산되는 먼지값들은 모두 합쳐주면 되는거였다. 나는 함수들을 몇개 나눠서 구현했다. 우선 공기청정기를 기준으로 바람이 부는 방향을 다 저장하는 함수를 만들었다. 해당 방향은 내가 지정해놓은 dx, dy배열을 기준으로 방향을 저장했고, 이렇게 방향이 저장된 배열은 바람이 불 때 사용했다. 다음은 미세먼지의 확산 함..
16235 - 나무 재테크
·
백준
문제 https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 풀이 요구사항 같은 경우에는, 크게 설명할 게 없다. 각 칸마다 1개 이상의 나무들을 저장할 수 있는 리스트와, 양분을 저장할 수 있는 저장 공간을 만들어둔다. 이후 봄, 여름, 가을, 겨울 로직을 순서대로 실행한다. 봄에서 특정칸의 나무들을 모두 체크할 때, 만약 현재 양분으로 나무들을 못주면 죽는 나무로 처리한다. 그리고 양분을 줄 수 있는 나무중 5의 배수인 나무의 위치..
15864 - 사다리 조작
·
백준
문제 https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 풀이 시간제한이 굉장히 빡센 문제로, 오랫동안 고민한 문제다. 내가 처음 풀이했던 방식은 다음과 같다. 우선 입력을 모두 받고 아래와 같은 형식으로 2차원 배열을 저장한다. '#' 은 내가 움직일 수 있는 가로선과 세로선을 의미한다. 이후에 사다리를 0개, 1개, 2개, 3개 놓는 모든 상황을 dfs로 만들어주고 탐색을 시작한다. 단 가로선이 연속되지 않도록 검사하면서 놓아주어야 한다. 탐..
15863 - 감시
·
백준
문제 https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 풀이 완탐 + 구현문제이다. 첫번째로 cctv 종류와 cctv위치를 배열에 저장한다. 다음으로 cctv별로 회전할 수 있는 경우의 수를 모두 구한다. 나는 일관성을 가지기 위하여 모두 4방향으로 회전한다고 가정했으며 [ 0, 1, 2, 3 => 우, 하, 좌, 상 ] 순으로 정의했다. 이 때 itertools product를 통하여 모든 경우의 수를 만들었다. 마지막으로 3차원 배..
3190 - 뱀
·
백준
문제 https://www.acmicpc.net/status?user_id=whipbaek&problem_id=3190&from_mine=1 채점 현황 www.acmicpc.net 풀이 처음에 헷갈렸던거 1. 가장 좌측 상단은 [1, 1] 이다. [0, 0] 이 아니다. 2. 시간과 방향이 입력될 때 8 D, 10 D 이런식으로 들어오는데 시간초는 절대적인 시간을 의미한다. 8초가 끝난 후에 이후 추가적인 10초가 아니라 '시작 시간' 이후의 시간을 받는것이니 헷갈리지 말자. 풀이 처음에는 방향을 설정해줬다. L을 받으면 왼쪽으로 틀고, D를 받으면 오른쪽을 틀도록 dx, dy를 설정했다. 이후에는 사과의 위치와 뱀의 위치를 저장하는 2차원 배열을 각각 만들었다. * 생각해보니 이 두개의 정보는 한 배열..
LV2 [KAKAO] [3차] 파일명 정렬
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/17686?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 최대한 다중정렬을 활용하려 해서 풀이했다. 우선 head, number, tail부분으로 나누었다. (코드상에는 tail은 body 에 들어간다.) 다중 정렬시에 문제가 좀 있었는데, 오름차순이나 내림차순 정도로만 기준을 정할 수 있는것이였다. 대소문자 구분을 하지 않는 추가조건이나 , 다른 정렬방법을 넣는 방식을 (아마 내가 몰라서) 취할 수 없었다. 따..
LV2 [KAKAO] k진수에서 소수 개수 구하기
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/92335 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 단순한 문제이다. 조건이 많아보이지만 k진수로 바꿔준 후에 0을 기준으로 숫자를 나눈후에 그 숫자가 소수인지 아닌지 판별해주면 끝이다. 뭐 0이 옆에 있고 이런거 안따져도 된다. 다 따져보면 결국 소수값인지 판별만 하면 되는것이다. 단 17003 이런식일시 0과 0 사이의 결과가 ' ' (공백) 으로 반환되기에 예외처리를 해주면 된다. 코드 import math def is_prime_..
1010 - 다리 놓기
·
백준
문제 https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 풀이 해당문제는 조합의 경우의 수를 구하면 바로 해결되는 문제이다. 위의 식을 고대로 구하면 답이 나온다. 단 팩토리얼은 DP로 미리 다 계산해둔다음 풀면 쉽게 풀 수 있다. 코드 d = [1] * 31 d[0] = 1 d[1] = 1 for i in range(2, 31): d[i] = d[i-1] * i t = int(input()) for _ in range(t): n, m = map(..