알고리즘 문제풀이/파이썬 17

[이코테-구현] 실전 - 10. 자물쇠와 열쇠

[문제] https://programmers.co.kr/learn/courses/30/lessons/60059 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr [책 풀이] 🔎 아이디어 열쇠를 회전하고 움직여서 자물쇠와 정확히 맞물리는지 완전 탐색한다. 열쇠가 회전하는 모든 경우의 수: 90도, 180도, 270도, 360도(제자리)를 고려한다. 열쇠가 자물쇠 위를 이동하는 모든 경우 수: 열쇠의 botton-right 모서리가 자물쇠의 top-left 모서리와 맞닿을 때 부터 ~ 열쇠의 top-left 모서리가 자물쇠의 botton-right 모서리와 맞닿을..

[이코테-구현] 실전 - 09. 문자열 압축

[문제] https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr [책 풀이] 🔎 아이디어 1부터 문자열 절반 크기까지 step을 차례대로 증가시키면서, 각 step에 대한 압축 문자열을 구한다. 각 step에 대한 압축 문자열 중 가장 짧은 것이 정답이다. 🔎 코드 def solution(s): length = len(s) # 반복되는게 없는 경우 answer = length # 압축단위(step) : 1 ~..

[이코테-구현] 실전 - 08. 문자열 재정렬

[문제] 알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다. 예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다. [입력 조건] 첫째 줄에 하나의 문자열 S가 주어집니다. ( 1≤ S의 길이 ≤ 10,000 ) [출력 조건] 첫째 줄에 문제에서 요구하는 정답을 출력합니다. [내 풀이] 🔎 아이디어 알파벳과 숫자를 구분하기 위해, 문자열을 순회하면서 알파벳은 리스트에 저장하고 숫자는 정수값으로 더한다. 🔎 코드 s = input() result = [] number = 0 for i in s: # 알파벳인 경우 list에 삽입 if i.isalpha..

[이코테-구현] 실전 - 07. 럭키 스트레이트

[문제] https://www.acmicpc.net/problem/18406 18406번: 럭키 스트레이트 첫째 줄에 점수 N이 정수로 주어진다. (10 ≤ N ≤ 99,999,999) 단, 점수 N의 자릿수는 항상 짝수 형태로만 주어진다. www.acmicpc.net [내 풀이] 🔎 코드 n = list(map(int,input())) length = len(n) mid = length//2 left_sum = sum(n[0:mid]) right_sum = sum(n[mid:]) if left_sum == right_sum: print('LUCKY') else: print('READY')

[이코테-구현] 실전 - 게임 개발

[문제] 현민이는 게임 캐릭터가 맵 안에서 움직이는 시스템을 개발 중이다. 캐릭터가 있는 장소는 1 × 1 크기의 정사각형으로 이뤄진 N × M 크기의 직사각형으로, 각각의 칸은 육지 또는 바다이다. 캐릭터는 동서남북 중 한 곳을 바라본다. 맵의 각 칸은 (A,B) 로 나타낼 수 있고, A는 북쪽으로부터 떨어진 칸의 개수, B는 서쪽으로부터 떨어진 칸의 개수이다. 캐릭터는 상하좌우로 움지일 수 있고, 바다로 되어 있는 공간에는 갈 수 없다. 캐릭터의 움직임을 설정하기 위해 정해 놓은 매뉴얼은 이러하다. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향(반시계 방향으로 90도 회전한 방향)부터 차례대로 갈 곳을 정한다. 캐릭터의 바로 왼쪽 방향에 아직 가보지 않은 칸이 존재한다면, 왼쪽 방향으로 회전한 다음 ..

[이코테-구현] 실전 - 왕실의 나이트

[문제] 이것이 취업을 위한 코딩 테스트다 with 파이썬 P 115에 실전 2 왕실의 나이트 [입력 조건] 첫째 줄에 8×8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행으로 이뤄진다. [출력 조건] 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오. a1 2 [책 풀이] 🔎 아이디어 규칙에 따른 나이트의 이동 경로를 리스트에 저장한다. move_type = [(-1,-2), (-1,2), (1,-2), (1,2), (-2,-1), (-2,1), (2,-1), (2,1)] 규칙에 따른 이동 경로는 총 8가지이고, 튜플의 첫번째 원소는 행, 두번째 원소는 열의 이동 경로를 뜻한다. 나이트가 move_type 에 따라..

[이코테-구현] 예제 - 시각

[문제] 정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오. 예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다. 00시 00분 03초 00시 13분 00초 반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안 되는 시각이다. 00시 02분 55초 01시 27분 45초 [입력 조건] 첫째 줄에 정수 N이 입력된다. (0≤ N ≤ 23) [출력 조건] 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 출력한다. 5 11475 [책 풀이] 🔎 아이디어 for 문을 이용하여 문자열을 순회하여 3이 들어가..

[이코테-구현] 예제 - 상하좌우

[문제] 이것이 취업을 위한 코딩 테스트다 with 파이썬 의 p.110 예제 4-1 상하좌우 [입력 조건] 첫째 줄에 공간의 크기를 나타내는 N이 주어진다. (1≤ N ≤ 100) 둘째 줄에 여행가 A가 이동할 계획서 내용이 주어진다. (1≤ 이동횟수 ≤ 100) [출력 조건] 첫째 줄에 여행가 A가 최종적으로 도착할 지점의 좌표 (X,Y)를 공백으로 구분하여 출력한다. 5 R R R U D D 3 4 [책 풀이] 🔎 아이디어 문제의 요구사항대로 구현한다. 리스트에 인덱스를 이용하여 이동 정보를 저장하고 사용한다. 🔎 코드 n = int(input()) plan = list(input().split()) x,y=1,1 #인덱스를 이용하여 관련있는 정보 저장, 사용 move_type = ['L','R',..

[이코테-그리디] 기출 - 06.무지의 먹방 라이브

[문제] https://programmers.co.kr/learn/courses/30/lessons/42891 코딩테스트 연습 - 무지의 먹방 라이브 programmers.co.kr [정확성 통과, 효율성 실패 풀이] - 본인 풀이 🔎 아이디어 가장 쉽게 떠오를 수 있는 방법은 문제의 입출력 예시를 코드로 구현하는 것이다. 🔎 코드 설계 K초가 모든 음식을 먹는데 필요한 시간보다 크거나 같으면 애초에 K초 동안 모든 음식을 먹을 수 있다. 따라서 이를 확인해 조건이 만족되면 바로 -1을 반환한다. K초가 점점 줄어들면서 시간이 남아 있는 음식이면 먹고, 음식의 남은 시간을 변경한다. 그리고 다음으로 먹을 음식 번호를 찾는다. 음식 번호를 찾을 때 남은 시간이 0이 아닌 번호를 찾는다.다음 음식 번호는 (..

[이코테-그리디] 기출 - 05. 볼링공 고르기

[문제] A, B 두 사람이 볼링을 치고 있습니다. 두 사람은 서로 무게가 다른 볼링공을 고르려고 합니다. 볼링공은 총 N개가 있으며 각 볼링공마다 무게가 적혀 있고, 공의 번호는 1번 부터 순서대로 부여됩니다. 또한 같은 무게의 공이 여러개 있을 수 있지만, 서로 다른 공으로 간주합니다. 볼링공의 무게는 1부터 M까지의 자연수 형태로 존재합니다. 예를 들어 N이 5이고, M이 3이며 각각의 무게가 차례대로 1, 3, 2, 3, 2일 때 각 공의 번호가 차례대로 1번부터 5번까지 부여됩니다. 이때 두 사람이 고를 수 있는 볼링공 번호의 조합을 구하면 다음과 같습니다. (1번, 2번), (1번, 3번), (1번, 4번), (1번, 5번), (2번, 3번), (2번, 5번), (3번, 4번), (4번, 5번..