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(..
12100 - 2048 (Easy)
·
백준
문제 https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 풀이 완전탐색이 조금 곁들여진 구현문제이다. 우선 최대 5번을 움직여야하니 경우의 수를 모두 만들어주면 된다. 난 itertools 의 product를 사용해서 경우의 수를 만들었고, 각자 숫자와 방향을 매칭해서 생각했다. ( 0, ← ) , ( 1, ↑ ) , ( 2, → ) , ( 3, ↓ ) 이후에 숫자를 어떻게 합칠지 말지를 생각했는데, 행 단위로 생각했고..
15685 - 드래곤 커브
·
백준
문제 https://www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커 www.acmicpc.net 풀이 문제를 풀기전, 해당 문제의 x와 y값을 잘 참조하자. 해당 문제 풀이의 핵심은 시계방향으로 회전하고, 그 방향을 계속 저장해주는것이다. 우선 격자를 이동할 배열 순서를 → ↑ ← ↓ 순으로 저장한다. 0방향으로 시작하는 드래곤 세대들을 살펴보면 ※ 0세대 : → ※ 1세대 : → ↑ ※ 2세대 : → ↑ ← ↑ ※ 3세대 : → ↑ ← ↑ ← ↓ ← ↑ 순으..
17141 - 연구소 2
·
백준
문제 https://www.acmicpc.net/problem/17141 17141번: 연구소 2 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 승원이는 연구소의 특정 위치에 바이러스 M개를 놓을 것이고, 승원이의 신호와 동시에 바이러 www.acmicpc.net 풀이 완전탐색 + Multisource BFS 문제이다. 여러개의 시작점을 모두 구한 후에, BFS를 모두 실행해본다음, 빈칸에 바이러스를 다 퍼트리는 경우, 최솟값을 구하면 된다. 빈칸에 모두 퍼졌는지는 초기에 빈칸의 개수를 구하고, BFS 실행 로직에 빈칸만큼 바이러스가 퍼진지 확인했다. 문제를 풀면서 이슈가 좀 있었는데 1. 시간초과 처음 완전탐색을 위해서 itertools.permutatio..
14890 - 경사로
·
백준
문제 https://www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 나는 현재 위치 기준으로, 다음 변하는 값이 큰 값인지, 작은 값인지에 따라 분기를 나누었다. (만약 한 칸 차이가 아니라면 무조건 안되므로 바로 False!) 큰 경우를 살펴보면 예로, 배열은 [2,2,3,3] l은 2 라고 해보자. 2의 개수를 계속 카운트 하다가, 3이 나오면 경사로는 2에 설치해야한다. 따라서 2의 개수가 l개 이상인지 판단하면 된다. 만약 경사로를 설치할 수 있다면 현재값을 3으로 이..
LV2 [KAKAO] 후보키
·
프로그래머스
문제 https://school.programmers.co.kr/learn/courses/30/lessons/42890 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 처음에 후보키 개념이 애매모호해서, 그것부터 정리하고 문제풀이를 시작했다. 문제의 핵심은 유일성보다는 최소성을 어떻게 판별할것인가, 였던거 같다. 최소성을 판별하기 위해서는 부분집합을 활용하면 된다. 만약 속성이 '학번' , '이름', '학년' 이라고 가정해보자. 이 때 '학번' 하나만으로도 후보키가 될 경우, '학번' 이 특정 집합의 부분집합이 되는 순간 최소성을 위반한다. '학번' ..
14499 - 주사위 굴리기
·
백준
문제 https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 풀이 삼성 기출답게 시뮬레이션, 빡구현 문제다. 주사위의 절대적인 위치를 배열로 정해둔다. (난 문제에서 나온 숫자와 위치를 매칭했다.) 이후 동, 서, 남, 북 이동시에 갱신되는 로직을 각각 작성하면 된다. (이건 실제로 주사위 한 번 굴려보거나 그림 그려보면 된다.) 그리고 이동한 칸의 값을 보고 복사여부를 따져주면 된다...