파이썬 30

[리트코드 leetcode] 2574. Left and Right Sum Differences (파이썬/Python)

목차 개요 Left and Right Sum Differences - LeetCode 0을 인덱스로 시작하는 배열이 있다. 이 배열에 대해 leftsum과 rightsum을 구하고 그 둘의 차의 절대값을 원소로 하는 answer 배열을 구하라. leftsum과 rightsum은 이전 원소의 누적합. 자세한 건 예시 참조. 풀이 문제에 나온 그대로 따라가면 된다. 대충 하면 3개의 반복문을 쓰게 되는데, 그렇게 해도 시간 초과는 나지 않는다(내가 이걸 썼다). 그렇지만 한번의 반복문으로 구하는 방법도 있다. 코드 class Solution: def leftRigthDifference(self, nums: List[int]) -> List[int]: leftsum = [0] rightsum = [0] for..

[백준] 9935번: 문자열 폭발 (파이썬/Python)

목차 개요 9935번: 문자열 폭발 (acmicpc.net) 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 풀이 스택을 활용하는 문제. 출력할 리스트를 만들고 입력받은 문자열에서 문자를 하나하나 출력 리스트에 넣으면서 폭발 문자열이 있는지 체크한다. 있으면 해당 문자열을 바로 없애고 이후 계속 문자를 하나씩 넣으면 된다. 스택으로 차곡차곡 출력 문자열이 쌓이다가 폭발할 문자열이 만들어진다면 그 놈만 날리고 다시 문자열을 쌓는다는 것. 원리는 어렵지 않다. 코드 inlst = input() ex..

[백준] 2444번: 별 찍기 - 7 (파이썬/Python)

목차 개요 2444번: 별 찍기 - 7 (acmicpc.net) 2444번: 별 찍기 - 7 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다. www.acmicpc.net 풀이 문제 설명이 간략해서 좋구만. 이런 문제가 간단해보이지만, 인덱스에 조건을 걸거나 응용하는 류의 문제라서 막상 해보면 꽤 귀찮은 문제이기도 하다. 규칙을 찾는 것 자체도 코테를 하는데 있어서는 중요한 역량이기도 하고. 보아하니 중간을 두고 대칭의 모양을 띄고 있으니 가운데가 0 정도의 값, 그리고 위 아래로 이산하면 될 것 같다. 그렇다면 abs를 써서 절대값을 활용하면 되겠다. 별의 개수는 홀수이다. abs에 2를 곱하고 1을 빼는 식으로 하면 될 것 같다. 공백 수는 432101234이다. 절대값을 그대로 활용하면 될..

[백준] 10811번: 바구니 뒤집기 (파이썬/Python)

목차 개요 10811번: 바구니 뒤집기 (acmicpc.net) 10811번: 바구니 뒤집기 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2 www.acmicpc.net 풀이 리스트 속에서 특정 범위를 주면 그 범위의 값을 거꾸로 만드는 문제. 파이썬에서는 reversed이라는 내장함수를 통해 원소들은 거꾸로 된 iterable한 객체를 만들 수 있다. 코드 import sys input = sys.stdin.readline N, M = map(int, input().split()) inlst = list(range(1, N+1)) for _ in range(..

[백준] 25682번: 체스판 다시 칠하기 2 (파이썬/Python)

목차 개요 25682번: 체스판 다시 칠하기 2 (acmicpc.net) 25682번: 체스판 다시 칠하기 2 첫째 줄에 정수 N, M, K가 주어진다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 풀이 단계별로 풀어보기에 있는 문제라서 이 문제의 분류가 누적합이라는 것을 아는 상태였으나, 그럼에도 푸는 것이 쉽지 않았다. [BAEKJOON] 25682 체스판 다시 칠하기 2 (tistory.com) 결국 이 분의 글을 참조하여 이해하고 풀어냈다. 무작위로 색칠되어 있는 격자판이 있고, 거기에서 원하는 길이만큼 정사각형 모양으로 잘라내 체스판으로 삼고 싶은 것이다. 이때 무작위로 색칠이 된 판이니 아무리 원하는 곳을 잘라내더라..

[백준] 2587번: 대표값2 (파이썬/Python)

목차 개요 2587번: 대표값2 (acmicpc.net) 2587번: 대표값2 어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + www.acmicpc.net 풀이 5개로 고정된 배열을 평균내고, 정렬해서 중앙값을 찾는 문제. sorted를 활용하면 쉽게 정렬할 수 있다. 직접 정렬을 한다면 코드 import sys input = sys.stdin.readline inlst = [] for _ in range(5): inlst.append(int(input())) print(sum(inlst) // 5) print(sorte..

[백준] 2563번: 색종이 (파이썬/Python)

목차 개요 2563번: 색종이 (acmicpc.net) 2563번: 색종이 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 www.acmicpc.net 풀이 문제에서 흰색 도화지가 100 * 100으로 고정되어 있어 그 안 속의 원소를 전부 고려하더라도 10000가지밖에 되지 않는다. 그렇기에 2차원 배열을 선언하고 각 원소를 좌표 삼아 값을 매겨 넓이를 구한다. x, y좌표를 순회하기 때문에 이중 반복문을 써야 하지만, 그래봐야 10000가지를 순회하는 것이라 부담이 적다. 코드 import sys input = sys.stdin.readline lst = ..

[백준] 2566번: 최댓값 (파이썬/Python)

목차 개요 2566번: 최댓값 (acmicpc.net) 2566번: 최댓값 첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다. www.acmicpc.net 풀이 2차원에서 인덱스까지 찾는 문제. 이런 문제는 진짜 numpy를 쓰면 쉽게 풀 수 있다. 입력을 받을 때 바로 최대값을 찾으면서 진행한다. 코드 import sys input = sys.stdin.readline ans = -1 position = [0,0] for i in range(9): row = list(map(int, input().split())) max_val = max(row) if ans < max_val..

[백준] 2738번: 행렬 덧셈 (파이썬/Python)

목차 개요 2738번: 행렬 덧셈 (acmicpc.net) 2738번: 행렬 덧셈 첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같 www.acmicpc.net 풀이 2차원 행렬을 사용하는 문제. 같은 차원의 두 행렬을 받고, 그 행렬을 더해주면 되는데 numpy라면 알아서 element-wise 연산을 진행해주지만 기본 파이썬에는 그딴 게 없다. 그래서 결국 2중 반복문을 돌기는 해야하는 것 같다. 먼저 첫번째 행렬을 입력으로 받아 만들어준 뒤에 두번째 행렬을 입력으로 받을 때 바로 첫번째 행렬에 값을 더해준다. 그리고 나오는 값들을 바로 바로 ..

[백준] 5597번: 과제 안 내신 분..? (파이썬/Python)

목차 개요 5597번: 과제 안 내신 분..? (acmicpc.net) 5597번: 과제 안 내신 분..? X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데, www.acmicpc.net 풀이 1차원 배열에서 문제의 조건을 만족하는 두 값을 찾는 문제. append를 쓰던 remove를 쓰던 방법은 다양하다. 나처럼 무식하게 for문을 돌아도 된다. 나는 list를 가지고 하는 연산이 대체로 느리다고 알고 있어서 그냥 순회를 하는 방향을 택했다. 코드 import sys input = sys.stdin.readline lst = [0 for _ in range(3..