Python 9

Python 파이썬 - 2차원 리스트 90도 회전 (zip 메서드 활용)

문제를 풀다보면 배열을 시계방향으로 90도로 회전하는 문제들이 많다. ex) 백준 18808번 스티커 붙이기 예를 들어 3x4 리스트를 시계방향으로 90도씩 회전하면 아래와 같이 만들어진다. 총 4번의 회전이 끝나면 360도가 되어 원래 모양으로 되돌아 온다. 이를 파이썬에서는 2가지 방법으로 구현할 수 있다. 일반적인 방법 import copy _list = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]] n = len(_list) m = len(_list[0]) result = [[0]* n for _ in range(m)] for i in range(n): for j in range(m): result[j][n-i-1] = _list[i][j] _list = copy.deep..

[BOJ 백준] 13913번 : 숨바꼭질4 (Python, 파이썬)

www.acmicpc.net/problem/13913 13913번: 숨바꼭질 4 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 기본적인 BFS에 방문했던 경로를 따로 저장하여 경로를 역순으로 탐색하는게 추가된 문제였다. 수빈이가 갈 수 있는 3가지 경로을 모두 큐에 같이 저장하고 해당 경로마다 탐색을하면 분명 시간초과 또는 메모리 초과가 발생할 것이다. 기본적으로 수빈이가 이미 갔던 경로는 파악하기 위해서는 bool 타입의 visited 배열로 단순히 방문체크만 해주는 것에 한가지를 더 추가해야한다. ..

[BOJ 백준] 9019번 : DSLR (Python, 파이썬)

www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 www.acmicpc.net 카테고리 분류에 BFS가 있어서 당황했던 문제이다. 이런류의 문제를 BFS에 접목시킨다는 발상을 하기가 어렵다. 실제 코테에 나왔다면 못풀었을 것이다. 어려웠고 놓쳤던 부분은 다음과 같다. '123' 을 R 연산하면 312가 아니라, '2031'이된다. 숫자는 무조건 4자리로 고정되어있기 때문이다. 숫자 하나당 4가지의 경우의 수가 발생해서 4^n 만큼의 경우의 수가 나올 거 같은데, 어떻게 시간 ..

Python 자료형 별 메서드 시간 복잡도 정리

list Index l[i] O(1) 인덱스로 값 찾기 Store l[i] = 0 O(1) 인덱스로 데이터 저장 Length len(l) O(1) 리스트 길이 Append l.append(5) O(1) 리스트의 맨 뒤에 데이터 저장 Pop l.pop() O(1) 리스트의 맨 뒤의 데이터 pop Clear l.clear() O(1) 리스트 초기화 Slice l[a:b] O(b-a) 슬라이싱 되는 길이에 비례 Extend l.extend(...) O(len(...)) 확장되는 길이에 비례 Construction list(...) O(len(...)) 리스트 길이에 비례 check ==, != l1 == l2 O(N) 전체 리스트가 동일한지 확인 Insert l[a:b] = ... O(N) 데이터 삽입 Del..

Programming/Python 2021.01.10

[BOJ 백준] 10825번 : 국영수 (Python, 파이썬)

www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 간단한 문제였지만 파이썬에서 람다를 활용하여 정렬하는 법을 알 수 있었다. 리스트에 들어오는 원소는 (Junkyu, 50, 60, 100)이다. 맨 앞에 문자가 있으므로 뒤에 숫자들도 문자로 인식된다. 그렇기 때문에 람다식에서 숫자들을 int로 형변환 해줘야 한다. 정렬순서는 문제에 나와있는 것과 동일하게 하면된다. 국어 점수가 감소하는 순서로 국어 점수가 같으면 영어 점수가 증가하는 순서..

[BOJ 백준] 2638번 : 치즈 - 파이썬, Python

www.acmicpc.net/problem/2638 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5≤N, M≤100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 표 www.acmicpc.net 문제의 구현 로직은 다음과 같다. 모든 치즈가 다 녹았는지 확인한다. 남은 치즈가 있다면 전부 녹을 때 까지 아래의 과정을 반복한다. 다른 치즈 내부 공간에 있지 않은 치즈들 중 외부 공기와 2개 변 이상 접촉한 치즈를 체크한다. 체크된 치즈를 녹인다. 1, 3번은 크게 어렵지 않은데 2번이 조금 까다로운 편이었다. 단순히 상,하,좌,우 중 공기인 칸이 2개 이상인지만 확인하면 안된다. 왜냐하면 상하좌..

[BOJ 백준] 9205번 : 맥주 마시면서 걸어가기 - 파이썬, Python

https://www.acmicpc.net/problem/9205 9205번: 맥주 마시면서 걸어가기 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. www.acmicpc.net 전형적인 BFS 탐색을 활용해서 푸는 문제였다. 상근이는 무조건 집 -> 편의점 -> 편의점 .. -> 페스티벌 로 움직이기 때문에 다음번 편의점에 가서 항상 맥주를 최대로 살 수 있다. 굳이, 이동할 때 마다 이동거리를 50m로 나누면서 이동 가능 여부를 판단하지 않고 맥주를 20개 먹었을 때 갈 수 있는 최대 거리인 1,000m를 기준으로 다음번 편의점 또는 페스티벌 장 까지의 거리가 1..

Python 백준 문제풀이 시 입출력 정리

input() : 한 줄의 문자열을 입력 map() : 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용 # 공백을 기준으로 구분된 데이터를 입력 받을 떄 data = list(map(int, input().split())) # 공백을 기준으로 구분된 데이터가 많지 않다면 a, b, c = map(int, input().split()) 파일 입출력 sys.stdin = open("input.txt", "r") 좀 더 빠르게 입력 받기 sys.stdin.readline() 사용 단, 입력 후 엔터가 사용되므로 rstrip() 를 함께 사용 import sys # 공백으로 구분된 2개 숫자 입력 받기 N, M = map(int,sys.stdin.readline().split()) # 2차원 리스트 입..

Programming/Python 2021.01.03

Python 라이브러리 정리

Counter 리스트와 같은 반복 가능한 객체가 주어졌을 때, 내부의 원소가 몇번 등장했는지 반환 from collections import Counter counter = Counter(['red', 'red', 'blue', 'green', 'blue']) print(counter['blue']) print(counter['red']) 리스트에서 맨 뒤 원소부터 확인 하고 싶을 때 음수인덱스 사용 arr = [1,2,3,4,5,6] print(arr[::-1]) # 맨 뒤에서 부터 1칸씩 print(arr[1:5:2]) # index 1부터 4까지 2칸 간격으로 진법 변환 num = '4213&..

Programming/Python 2021.01.03