반응형

ProblemSolving/구현, 시뮬레이션, 완전탐색 21

프로그래머스 124 나라의 숫자 (파이썬)

구현, Leve 2 문제: 124 나라의 숫자 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 문제 설명 124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다. 예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다. 10진법 124 나라 10진법 124 나라 1 1 6 14 2 2 7 21 3 4 8 22 4 11 9 24 5 12 10 41 자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요. 제한사항 n은 500,000,..

SWEA 1928 Based64 Decoder (파이썬)

D2, 구현, 수학 문제 링크 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 첫번째 제출 코드 (정답) from collections import defaultdict T = int(input()) dic = defaultdict(int) # 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다. for i in range(ord('A'), ord('Z')+1): dic[chr(i)] = i-65 for i in range(ord('a'), ord('z')+1): dic[chr(i)] = i-65-6 dic.update({'0':52, '1':53, '2':54, '3':55, '4':56, '5':57, ..

프로그래머스 행렬 테두리 회전하기 (파이썬)

구현, Level 2 문제 : https://programmers.co.kr/learn/courses/30/lessons/77485 문제 설명 rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다. x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다. 다음은 6 x 6 크기 행렬의 예시입니다. 이 행렬에 (2, 2, 5, 4) 회전을 적용하..

프로그래머스 주차 요금 계산(파이썬)

구현, 2022 KAKAO BLIND RECRUITMENT 기출 문제 설명 주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다. 요금표 기본 시간(분) 기본 요금(원) 단위 시간(분) 단위 요금(원) 180 5000 10 600 입/출차 기록 시각(시:분) 차량 번호 내역 05:34 5961 입차 06:00 0000 입차 06:34 0000 출차 07:59 5961 출차 07:59 0148 입차 18:59 0000 입차 19:09 0148 출차 22:59 5961 입차 23:00 5961 출차 자동차별 주차 요금 차량 번호 누적 주차 시간(분) 주차 요금(원) 0000 34 + 300 = 334 5000 + ..

백준 23289 온풍기 안녕! (파이썬)

문제 : https://www.acmicpc.net/problem/23289 23289번: 온풍기 안녕! 유난히 추운 날씨가 예상되는 이번 겨울을 대비하기 위해 구사과는 온풍기를 설치하려고 한다. 온풍기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기 www.acmicpc.net 조건 요약 ''' 가장 처음 온도 0, 빈칸은 온도 0 1. 집에 있는 모든 온풍기에서 바람 한번 나옴 2. 온도 조절 3. 온도가 1이상인 가장 바깥쪽 칸의 온도 1 감소 4. 초콜릿 하나 먹음 5. 모든 5번칸 온도가 K 이상이 되었는지 검사 , 모든 칸의 온도가 K 이상이면 중단, 아니면 1반복 온풍기 나오는 방향: 동서남북 중 하나 나오는 칸 바로 옆은 5 증가. 그 다음 4 (x..

백준 23291 어항정리 (파이썬)

22.05.05 추가) PC에서 검색하고 들어오면 화면이 모바일 버전으로 나옵니다. 다른 페이지는 문제가 없는데 어항정리만 뒤에 url에 "/m/" 이 추가되는 것을 확인했습니다. https://osnim.tistory.com/entry/%EB%B0%B1%EC%A4%80-23291-%EC%96%B4%ED%95%AD%EC%A0%95%EB%A6%AC-%ED%8C%8C%EC%9D%B4%EC%8D%AC 위 사이트로 이동해서 글을 보시면 모바일 화면이 아닌 PC 화면으로 글을 보실수 있을 것입니다 빨리 문제를 해결하겠습니다. 문제 : https://www.acmicpc.net/problem/23291 23291번: 어항 정리 마법사 상어는 그동안 배운 마법을 이용해 어항을 정리하려고 한다. 어항은 정육면체 모양이..

백준 23290 마법사 상어와 복제 (파이썬)

구현, 시뮬레이션 문제 : https://www.acmicpc.net/problem/23290 23290번: 마법사 상어와 복제 첫째 줄에 물고기의 수 M, 상어가 마법을 연습한 횟수 S가 주어진다. 둘째 줄부터 M개의 줄에는 물고기의 정보 fx, fy, d가 주어진다. (fx, fy)는 물고기의 위치를 의미하고, d는 방향을 의미한다. 방향 www.acmicpc.net 문제 요약 및 정리 ''' 4x4, 물고기 M 마리, 이동방향 1부터 8까지 ←, ↖, ↑, ↗, →, ↘, ↓, ↙ 상어와 물고기 같은 칸 가능, 둘 이상의 물고기 같은 칸 가능 마법 한번 다음과 같은 작업 순서 1. 복제 마법 시전 (5번에서 물고기 복제) 2. 모든 물고기 한 칸 이동 상어가 있는 칸 X, 물고기 냄새가 있는 칸 X..

백준 23288 주사위 굴리기 2 (파이썬)

문제 : https://www.acmicpc.net/problem/23288 23288번: 주사위 굴리기 2 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 가장 왼 www.acmicpc.net 문제 요약 ''' 1. NxM, 오른쪽 동쪽, 위쪽 북쪽, 주사위 각 면 1~6, 전개도 2. 전개도 2 4 1 3 5 6 3. 지도 윗 면 1, 동쪽을 바라보는 방향이 3 인 상태, 지도와 맞닿은 부분 6 4. 가장 처음 주사위 이동 방향 : 동쪽 주사위 이동 방식 1. 이동방향으로 한칸 구름, 칸이 없다면 반대방향으로 한 칸 구름 2. 도착한 칸 점수 획득 3. 주사..

백준 21610 마법사 상어와 비바라기 (파이썬)

문제 : https://www.acmicpc.net/problem/21610 21610번: 마법사 상어와 비바라기 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기 www.acmicpc.net 조건을 간단하게 정리하면 다음과 같습니다. ''' 1. 각 칸에 바구니, 바구니에 저장할 물의 양 제한 X 2. 1번행과 N 번 열이 연결되어 있음, 즉 맵 벗어나도 상관 x 3. 비바라기 > 맨 아래 1열 2열 맨 아래 위 행 1열 2열 비구름 생성 4. 비 구름을 M 번 이동, 방향 8개, 방향 d, 거리 s, 5. 방향 ←, ↖, ↑, ↗, →, ↘, ↓, ↙ 1. 모든 구름..

백준 20055 컨베이어 벨트 위의 로봇 (파이썬)

문제 출처: https://www.acmicpc.net/problem/20055 첫번째 풀이 최적화 이전 방법 (Python3는 시간초과, pypy3 는 통과) 1. 한 칸 회전 deque의 rotate를 이용하여 구현, robot을 벨트 위 index로 저장 popleft를 사용하여 처음 넣은 로봇이 처음 이동하게 만듦 robot에 저장된 인덱스를 1씩 증가 시켜 벨트 N번 칸이 아닐 경우만 로봇을 저장 2. 모든 로봇 한 칸씩 이동 popleft로 먼저 올라간 로봇 먼저 로봇의 위치를 저장한 robots 배열에서 현재 로봇이 다음 칸에 로봇이 있는지 확인 not in 으로 확인 처음 로봇이 N번째 위치에 있다면 robots 배열에 다시 삽입 X 3. 로봇 추가 4. count로 내구도 0인 벨트 개수..

백준 17779 게리맨더링2 (파이썬)

문제 출처: https://www.acmicpc.net/problem/17779 나의 접근법 처음에는 마름모를 기준으로 위, 오른쪽, 아래, 왼쪽을 맵 경계까지 1부터 4를 차례로 넣고 BFS로 graph의 꼭지점을 시작으로 탐색하려고 했으나 경계의 네 변의 길이가 모두 같은 경우는 쉽지만 마름모의 두 쌍의 길이가 다를 때는 범위 파악이 힘들었고 이렇게 해도 경계는 그려야 하기 때문에 BFS를 하지 않고 바로 반복문을 돌렸습니다. 구간을 5개로 나누는데 경계선 내부인 5번 선거구는 값을 넣지 않습니다. 구간을 나누는 방법은 x, y를 한 쌍을 기준으로 잡아 4부분으로 나누어 for문을 돌려 경계를 나누었습니다. 그리고 예를 들어 4번 지역은 행이 감소하면서 열이 증가하는 순서로 탐색하면 자칫 탐색을 못하..

백준 17140 이차원 배열과 연산 (Python)

문제 출처: https://www.acmicpc.net/problem/17140 나의 접근법 먼저 행과 열의 최대길이를 구분하여 계산합니다. R 연산 checkList 배열에 [숫자, 개수]를 함께 묶어 저장하여 not in으로 중복을 해결했습니다. 정렬은 sort함수의 lambda를 사용했습니다. 행이나 열의 최대 길이는 maxLen을 통해 값을 저장하여 maxLen 보다 작은 행 또는 열의 길이를 가진 경우 차이만큼 0을 추가해줍니다. C 연산 반복문으로 열을 바로 계산하면 R x C 만큼 더 늘어나야 하므로 for i in range(clen): checkList = [] col = list(zip(*arr))[i] 열 마다 zip 함수를 이용하여 편하게 행으로 바꿔 작업하였습니다. 행 연산 보다 ..

백준 14499 주사위 굴리기 (Python)

문제 출처: https://www.acmicpc.net/problem/14499 나의 접근법 먼저 이해가 안되어서 문제를 그림으로 펼쳐서 주사위를 하나 하나 이동시키고 윗면(x표시)을 확인했습니다. 처음에 전개도가 나와서 시작부터 전개도 모양인줄 알고 따라했는데 도처히 예제처럼 답이 안나와서 헤맸는데 제가 문제를 제대로 읽지 않았습니다. 처음 시작은 주사위의 모든 면이 0 입니다! 그 후 각 이동 명령에서 주사위의 이동을 다음과 같이 표현하며 규칙이나 성질을 찾아봤습니다. 위와 같이 동쪽으로 이동할 경우 윗면이 동쪽으로 이동하므로 배열에서 4번으로 이동하게 됩니다. 동, 서, 남, 북 모두 규칙을 찾아 구현을 하니 쉽게 정답을 맞을 수 있었습니다. 제출 코드 def check(x, y): if 0

백준 14500 테트로미노 - (Python)

문제 출처: https://www.acmicpc.net/problem/14500 나의 접근법 저는 처음에 풀 방법이 딱 한가지 밖에 생각이 안났습니다. 바로 테트로미노의 모든 회전과 대칭 좌표를 직접 찾아 반복문을 돌려가며 일일이 확인하는 것이었습니다. 그런데 제가 이번에도 문제를 제대로 확인하지 않아 회전만 구하고 대칭은 놓치고 구현했습니다. 그런데 제가 생각한 테트리스에는 대칭이 없어서 문제를 제대로 숙지 안하고 예측하여 푼 것이 화근이었습니다. 어쨌든 대칭까지 구현했는데 역시나 처음에는 틀렸습니다. 다행히 좋은 반례들을 모아놓은 분이 계셔서 그 반례 덕분에 코드 오류를 잡을 수 있었습니다. 그 반례는 맨 아래 첨부하겠습니다. 첫번째 코드 def check(tetro): x1, y1, x2, y2, ..

백준 12100 2048(Easy) - (Python)

문제 출처: https://www.acmicpc.net/problem/12100 나의 접근법 처음에는 알고리즘이 바로 생각안나서 알고리즘만 보고 힌트를 얻었습니다. 백트래킹과 브루트포스를 보고 DFS로 depth가 5일 때 종료해주면 된다고 생각해서 상,하,좌,우로 이동하는 것만 잘 만들어 주면 쉽게 해결할 수 있다고 생각했습니다. 첫번째 코드 def move(arr, i): # 위로 이동 if i == 0: for y in range(N): for x in range(1, N - 1): if arr[x][y] == arr[x + 1][y]: arr[x][y] = arr[x][y] + arr[x + 1][y] arr[x + 1][y] = 0 elif arr[x][y] == 0: arr[x][y] = ar..

백준 5373 큐빙 -(Python)

문제 출처: https://www.acmicpc.net/problem/5373 나의 접근법 첫번째 저는 처음에 윗면을 기준으로 규칙성을 찾으려고 했습니다. 하지만 시간이 너무 오래걸리고 다른 면에서의 규칙성과 윗면에서의 규칙성을 못찾아서 위 방법은 포기했습니다. 그리고 결국 제가 정한 시간이 초과되어 구글링을 통해 다른 사람들은 어떻게 규칙을 찾았는지 검색해보았습니다. 하지만 대부분의 답에서 일일이 각 면에 해당하는 코드를 작성한 것을 보고 저도 규칙성 보다는 일일이 구현하기로 결정했습니다. 이 방법이 귀찮기는 하지만 때로는 가장 확실한 방법인 것 같습니다. 두번째 세번째 풀이 두번째 풀이에서 전개로를 활용했습니다. 각 회전하는 면을 기준으로 상하좌우 3칸만 회전하는 변화만 파악하여 빠르게 파악하여 if..

백준 15685 드래곤 커브 - (Python)

문제 출처: https://www.acmicpc.net/problem/15685 나의 접근법 처음 문제를 접했을 때 너무 특이한 문제라서 당황했습니다. 90도 시계방향 회전을 어떻게 다뤄야 할지 감이 안잡혔습니다. 그래서 최대한 규칙을 찾으려고 노력했습니다. 일단 제일 눈에 띄는 점의 좌표 변화를 파악하여 규칙성을 찾으려고 노력했습니다. 하지만 세대가 커질수록 점의 좌표는 이전 세대의 좌표들과 너무 크게 벌어지고 규칙성도 없다는 느낌이 들어서 빠르게 포기했습니다. 다음은 방향의 변화들로 규칙성을 찾으려고 노력했습니다. 방향을 기준으로 하니 답이 보였습니다. 4 4 1 3 의 경우 윗 방향으로 3세대까지 드래곤이 커브를 하는데 다음 커브의 순서가 이전 커브 역순에서 +1 한 것이었습니다. 자세한 그림은 다..

백준 14891 톱니바퀴 (Python)

문제 출처: https://www.acmicpc.net/problem/14891 나의 접근법 먼저 문제를 보고 생각한 저의 제 플로우 차트입니다. 플로우 차트를 제대로 그린 것이 아니라 프로그램이 고려해야 되는 순서만을 빠르게 작성하고 디테일한 설정은 코드에서 구현하였습니다. 정답 코드 import sys from collections import deque def checkRight(idx, clockWise): if idx > 3 or gears[idx-1][2] == gears[idx][6]: return if gears[idx-1][2] != gears[idx][6]: checkRight(idx+1, -clockWise) gears[idx].rotate(clockWise) def checkLeft..

백준 14890 경사로 (Python)

문제 출처: https://www.acmicpc.net/problem/14890 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 나의 접근법 저는 row를 길을 세는 함수와 col의 길을 세는 함수를 다르게 작성하여 풀었습니다. 그리고 다음과 같이 예외를 추가하며 길의 수를 세었습니다. 1. 높이 차이가 2 이상인 경우 제외 2. 높이가 증가하다가 감소하는 경우, 감소하다 증가하는 경우 3. 높이가 낮은 칸의 개수가 L 보다 큰 경우 저는 이렇게 3가지를 구분하여 문제를 풀려고 했고 다음과 같이 코드를 작성하..

백준 14503 로봇 청소기 (python)

문제 출처: https://www.acmicpc.net/problem/14503 나의 접근법 저는 이 문제를 처음에는 BFS로 빠르게 풀려고 했습니다. 그런데 BFS는 경우 모든 장소를 탐색하지만 이 문제는 로봇청소기의 규칙대로 움직이기 때문에 연결된 모든 장소를 탐색하는 기존의 BFS 와는 조금 다른 방법으로 풀어야합니다. 이 문제를 풀면서 추가로 고려해야 할 점들이 조금 있었습니다. 사실 BFS라기 보다는 구현, 시뮬레이션, 완전탐색 문제에 가깝습니다. 1. 평범한 BFS 문제는 처음 방문하면 방문 표시를 해서 단 한번만 방문을 하게 하지만 이 문제는 뒤로가기를 하기 위해 방문했던 곳을 다시 방문할 수 있게 해야합니다. 2. 회전의 순서가 방향 순서와 다릅니다. 방향 순서 (북쪽기준, 시계방향) : ..

1 2
반응형