본문 바로가기

분류 전체보기

(87)
로봇 청소기 [백준 14503번] 문제 https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 내 풀이 dir를 딕셔너리로 만들고, 문제에서 주어진대로 '북, 동, 남, 서' 방향을 적었다. 현재 방향을 기준으로 왼쪽 방향을 탐색하기 때문에, 현재 방향에서 왼쪽으로 가려면 거꾸로 가야 한다. (ex. 현재 방향이 북쪽인 경우 : 북 -> 서 -> 남 -> 동) 그래서 d = (d - 1) % 4를 해서 왼쪽 방향을 탐색하도록 하였다. 네 방향을 탐색해야 하기 때문에 range(4)로..
플레이페어 암호 문제 https://softeer.ai/practice/info.do?idx=1&eid=804 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 내 풀이 입력으로 메시지와 키를 입력받는다. 원래 입력 받을 때 input()을 사용했었지만, 소프티어 사이트에서는 sys를 사용하길 원하는 것 같아서 sys를 사용한 입력으로 코드를 수정하였다. (시간이 더 빨라짐) key를 가지고 표를 만들었다. key에 있는 알파벳 먼저 배치한 후, 빈 곳은 사용하지 않은 알파벳을 사용하여 채워 넣었다. 1차원인 board 리스트에 알파벳을 냅다 쑤셔 넣었기 때문에 nboard라는 새로운 리스트를 선언하여 5x5 크기의 2차원 리스트로 만들었다. 메시지를 쪼갠 후 같은 알파벳이 연속으로 나..
연구소 [백준 14502번] 문제 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 내 풀이 1 combinations 사용하여 벽을 세웠다. 시간 : 700ms from collections import deque from itertools import combinations from copy import deepcopy N, M = map(int, input().split()) board, zero = [], [] for i in range(N): b = input().split()..
뱀 [백준 3190번] 문제 https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 내 풀이 뱀을 deque로 만들었다. 2차원 배열로 보드를 만들어서 구현하는 방법도 있지만, 나는 뱀, 사과 위치를 담은 리스트, 방향 변환 명령을 담은 리스트를 가지고 구현을 하였다. 뱀의 꼬리가 잘리는 것을 deque의 맨 앞의 원소를 빼내는 것으로 구현하였다. from collections import deque N = int(input()) K = int(input()) apple = [] ..
주사위 굴리기 [백준 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 내 풀이 삼성은 입력하는 것부터 코드를 짜야해서 조금 번거롭다. strip()와 split()를 야무지게 썼다. 먼저 주사위를 '동서남북'으로 굴렸을 때 모양이 어떻게 나올지부터 생각하였다. 그리고 [0, 1, 2, 3, 4, 5, 6]을 주사위의 [위쪽, 뒤쪽, 오른쪽, 왼쪽, 앞쪽, 아래쪽]으로 설정하였다. 주사위를 동쪽으..
알고리즘 어려워효 알고리즘은 해도 해도 어렵다. 머리가 굳은걸까. 아니면 아직 말랑말랑해지기 전인 걸까. 카카오 Lv3을 풀 때마다 허덕허덕거린다. 도대체 언제 느려고 그러냐~
불량 사용자 (Level 3) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/64064 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 user_id와 banned_id의 배열 크기가 작아서 O(n^2)으로 풀어야겠다고 생각했다. user와 banned를 비교한 후에 user가 banned와 길이가 같고 '*'을 제외한 나머지 문자들이 같으면 딕셔너리 dic에 user를 집어넣었다. 이렇게 함으로써 banned가 될 수 있는 user를 모았다. 이때 딕셔너리의 key는 인덱스로 하였는데, 그 이유는 처음부터 주어진 ..
자물쇠와 열쇠 (Level 3) 문제 https://school.programmers.co.kr/learn/courses/30/lessons/60059 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 가장 먼저 든 생각은 "자물쇠를 확장하자"였다. 가로와 세로의 길이가 (N + 2*M - 2)인 확장된 자물쇠를 만들어야 한다. 확장된 자물쇠의 중앙에 원래 자물쇠가 있다고 가정했을 때, 자물쇠의 홈의 좌표를 lock_zero에, 자물쇠 돌기의 좌표를 lock_one에 저장하였다. 열쇠는 90도 회전이 가능하므로, 열쇠를 90도로 회전하는 함수 rotate를 만들어주었다. 그리고 열..