분류 전체보기
[Python] 백준 13459번: 구슬 탈출
출처 : https://www.acmicpc.net/problem/13459 13459번: 구슬 탈출 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' 로 이루어져 있다. '.'은 빈 칸을 의미하고, '#'은 공이 이동할 수 없는 장애물 또는 벽을 의미하며, 'O'는 구멍의 위치를 의미한다. 'R'은 빨간 구슬의 위치, 'B'는 파란 구슬의 위치이다. 입력되는 모든 보드 www.acmicpc.net brute force하게 풀려고 작정하면 이렇게 코드가 길어질수도 있구나 코드의 bfs함수를 자세히 보면 #왼쪽 / #오른..
[Python] 백준 1759번: 암호 만들기
출처 : https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net Code from itertools import combinations L, C = map(int, input().split()) word_list = set(input().split()) ## A(=모음), B(=자음) A = set(['a', 'e', 'i', 'o', 'u']) B = set(['b','c','d','f','g','h','j','k','l','m','n','p','q','..
[Python] 백준 2583번: 영역 구하기
출처 : https://www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오른쪽 위 꼭짓점의 x, y좌표값이 빈칸을 사이에 두고 차례로 주어진다. 모눈종이의 왼쪽 아래 꼭짓점의 좌표는 (0,0)이고, 오른쪽 위 꼭짓점의 좌표는(N,M)이다. 입력되는 K개의 직사각형들이 모눈종이 전체를 채우는 경우는 없다. www.acmicpc.net 문제 설명 M X N 크기의 모눈종이가 있다. (M, N
[Python] 백준 2933번: 미네랄
출처 : https://www.acmicpc.net/problem/2933 2933번: 미네랄 창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄�� www.acmicpc.net 문제 설명 창영(=왼쪽), 상근(=오른쪽)이가 번갈아가며 막대기를 던진다. 막대를 던지기 전에 던질 높이를 정한다. 막대는 땅과 수평을 이루며 날아간다. 막대가 미네랄을 만나면, 미네랄은 없어지고 막대기도 그자리에서 소멸된다. 클러스터 : 미네랄 집합이라고 생각하면 된다. 동 서 남 북 으로, 서로 연결되어 있으면 하나의 클러스터이다. 미네랄이 부서짐에 따라, 새로운 클러스터가 생성될 수 있다. 새..
[Python/pandas] Series, DataFrame 기본
[Python / pandas] Series, DataFrame 기본¶ In [48]: import pandas as pd pandas는 numpy를 기반으로 해서 돌아가는 라이브러리이다. Series¶1차원 자료구조로, 리스트 같은 데이터를 받는다. In [49]: s1 = pd.Series([1,2,3,4,5]) s1 Out[49]: 0 1 1 2 2 3 3 4 4 5 dtype: int64 In [50]: s2 = pd.Series(['one', 'two',' three', 'four', 'five']) s2 Out[50]: 0 one 1 two 2 three 3 four 4 five dtype: object DataFrame¶..
[Python] 백준 17822번: 원판 돌리기
출처 : https://www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀있고, i번째 원판에 적힌 j번째 수의 위치는 (i, j)로 표현한다. 수의 위치는 다음을 만족한다. (i, 1)은 (i, 2), (i, M)과 인접하다. (i, M)은 (i, M-1), (i, 1)과 인접하다. (i, j)는 (i, j-1), (i, j www.acmicpc.net # 정리 인접한 곳에 같은 숫자가 존재하는지, 존재할경우 이를 제거하는 일을 간단한 dfs를 이용해서 풀었는데 문제는, ..
[Python] 백준 17837번: 새로운 게임 2
출처 : https://www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하나의 말 위에 다른 말을 올릴 수 있다. 체스판의 각 칸은 흰색, 빨간색, 파란색 중 하나로 색칠되어있다. 게임은 체스판 위에 말 K개를 놓고 시작한다. 말은 1번부터 K번까지 번호가 매겨져 있고, 이동 방향도 미리 정해져 있다. 이동 방향은 위, 아래, 왼쪽, 오른쪽 www.acmicpc.net # 정리 k개의 말을 입력받는다. 각 말들을 1번부터 k번 말까지 순서대로 주어진 규칙에 따라 이동시킨다. 값이 리턴되..
[Python] 백준 17140번: 이차원 배열과 연산
출처 : https://www.acmicpc.net/problem/17140 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net R연산과 C연산을 따로 만들 필요가 없다. C 연산 : 2차원 배열을 Transpose → R 연산 → Transpose r, c, k 를 입력받으면 board[r-1][c-1] = k 인지 확인한다. 혹은 시간이 100을 넘어서는지 확인한다. Python으로 2차원 배열을 Transpose하는 것은 쉽다. list(map(list, zip(*board))) 를 해보자. (b..
[Python] 백준 1987번: 알파벳
출처 : https://www.acmicpc.net/problem/1987 1987번: 알파벳 문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다. 좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 www.acmicpc.net # code ## import sys ## input = sys.stdin.readline def bfs(): mx = 0 queu..
[Python/내장함수] zip함수와 *args, **kwargs 란?
[Python] zip함수와 파라미터 앞에 *, **는 어떤 의미인가?¶ zip함수는 동일한 개수로 이루어진 자료형을 묶어주는 역할을 한다. 동일한 위치에 있는 요소들을 가져와서 함께 묶어주는 것 같다. 나중에, 2차원 배열과 관련해서 열(=col)들을 가져올때 zip을 사용하면 유용할 것 같다. [이유] 2차원 배열에서 각 행(=row)들은 인덱스를 통해서 가져오는 것이 쉽지만, 일반적인 방법으로 열(=col)을 가져오기 위해서는 for문이 필요하다. ex) 서로 다른 2개의 자료형을 묶어보자. In [1]: A = [1,2,3] B = [4,5,6] In [2]: for node in zip(A, B): print(node, type(node)) (1, 4) (2, 5) (3, 6) In [3]: f..