분류 전체보기
[Python/내장함수] lambda, map, filter, reduce 함수 사용법
[Python] lambda 함수, map 함수, filter 함수, reduce 함수 사용법¶ 1. lambda 함수 사용법¶ lambda 함수 - lambda 매개변수 : 표현식 - 함수명 필요 없음 - 한줄로 표현 가능한 함수 - 일반적인 함수처럼 정의해두고 필요할때마다 가져와서 쓰는것이 아니라, 필요한 곳에서 즉시 사용하고 버리는 일시적인 함수 - filter(), map(), reduce()등과 함께 사용하면 많은 응용이 가능해진다. 일반적인 함수 In [5]: def multiply(a, b): return a*b multiply(2, 3) Out[5]: 6 함수 대신 lambda 사용 In [6]: (lambda a,b : a*b)(2, 3) Out[6]: 6 lambda를 변수에 넣어서 재..
(Python) 백준 17143번: 낚시왕
출처 : https://www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. 칸에는 상어가 최대 한 마리 들어있을 수 있다. 상어는 크기와 속도를 가지고 있다. 낚시왕은 처음에 1번 열의 한 칸 왼쪽에 있다. 다음은 1초 동안 일어나는 일이며, 아래 적힌 순서대로 일어난다. 낚시왕은 가장 오른쪽 열의 오른쪽 칸에 이동하 www.acmicpc.net # Code from collections import deque def move(): ## 상어의 위치를 파악한다. loca..
(Python) 백준 18809번: Gaaaaaaaaaarden
출처 : https://www.acmicpc.net/problem/18809 18809번: Gaaaaaaaaaarden 첫째 줄에 정원의 행의 개수와 열의 개수를 나타내는 N(2 ≤ N ≤ 50)과 M(2 ≤ M ≤ 50), 그리고 초록색 배양액의 개수 G(1 ≤ G ≤ 5)와 빨간색 배양액의 개수 R(1 ≤ R ≤ 5)이 한 칸의 빈칸을 사이에 두고 주어진다. 그 다음 N개의 줄에는 각 줄마다 정원의 각 행을 나타내는 M개의 정수가 한 개의 빈 칸을 사이에 두고 주어진다. 각 칸에 들어가는 값은 0, 1, 2이다. 0은 호수, 1은 배양액을 뿌릴 수 없는 땅, 2는 배양 www.acmicpc.net pypy3로 제출하면 통과된다. 처음엔 pypy3로도 시간을 맞추기가 어려워서, 바킹독님의 코드를 참고했..
(Python) 백준 18808번: 스티커 붙이기
출처 : https://www.acmicpc.net/problem/18808 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연결되어 있다. 또한 모눈종이의 크기는 스티커의 크기에 꼭 맞아서, 상하좌우에 스티커가 포함되지 않는 불필요한 행이나 열이 존재하지 않는다. 아래는 올바른 모눈종이의 예시이다. 주황색 칸은 스티커가 붙은 칸을, 하얀색 칸은 스티커가 붙지 않은 칸을 나타낸다. 반면 아래는 올바 www.acmicpc.net # Code ## import sys ## input = sys.stdin.readline # 시계방향으로 90도 회전..
(Python) 백준 16235번: 나무 재테크
출처 : https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수이다. r과 c는 1부터 시작한다. 상도는 전자통신공학과 출신답게 땅의 양분을 조사하는 로봇 S2D2를 만들었다. S2D2는 1×1 크기의 칸에 들어있는 양분을 조사해 상도에게 전송하고, 모든 www.acmicpc.net 이 문제는 정말 여러번 풀어봤다. 문제 자체는 어렵지 않지만, 시간초과때문에 다소 빡셌다. 결국엔 시간때문에 다른 사람들의..
(Python) 백준 16234: 인구이동
출처 : https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모든 나라는 1×1 크기이기 때문에, 모든 국경선은 정사각형 형태이다. 오늘부터 인구 이동이 시작되는 날이다. 인구 이동은 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속된다. 국경선을 공유하는 두 나라의 인구 차이가 L명 www.acmicpc.net pypy3로는 통과했지만, 시간초과 문제로 python은 통과되지 못했다. 아직 시간초과문제에 많이 취약하다는 것이겠지.. ..
[Python/기타] 알고리즘(set을 이용한) 시간초과에 도움이 되는 팁
[Python] 알고리즘 문제 시간초과 발생했을때 팁 (bfs관련)¶ 백준의 인구이동 문제를 풀다가 시간초과 문제를 해결하기 위해 많은 방법을 써봤지만 늘 쓰던 방법들로는 시간초과문제를 해결할 수 없었다. 그와 관련해서 어떤 방식이 시간에 영향을 주는지 알아보기위해 간단한 테스트를 해봤다. bfs같은 문제를 풀때 if node not in visited:처럼 해당 원소가 어떤 저장공간(ex. 리스트, 집합 등등)에 존재하는가? 이런 문제를 다뤄야 할때, 어떻게 해야 시간초과를 해결할 수 있을까? In [11]: ## 1번 set ## a의 요소들을 (x, y)와 같이 저장하자. a = set() for i in range(500): for j in range(500): a.add((i, j)) In [1..
(Python) 백준 5373번: 큐빙
출처 : https://www.acmicpc.net/problem/5373 5373번: 큐빙 문제 루빅스 큐브는 삼차원 퍼즐이다. 보통 루빅스 큐브는 3×3×3개의 작은 정육면체로 이루어져 있다. 퍼즐을 풀려면 각 면에 있는 아홉 개의 작은 정육면체의 색이 동일해야 한다. 큐브는 각 면을 양방향으로 90도 만큼 돌릴 수 있도록 만들어져 있다. 회전이 마친 이후에는, 다른 면을 돌릴 수 있다. 이렇게 큐브의 서로 다른 면을 돌리다 보면, 색을 섞을 수 있다. 이 문제에서는 루빅스 큐브가 모두 풀린 상태에서 시작한다. 윗 면은 흰색, 아랫 면은 노란 www.acmicpc.net # Code ## rotate2 : 해당 면을 돌릴 때 일어나는 면의 변화 def rotate2(array, direction): ..
(Python) 백준 17144번: 미세먼지 안녕!
출처 : https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사과는 뛰어난 코딩 실력을 이용해 각 칸 (r, c)에 있는 미세먼지의 양을 실시간으로 모니터링하는 시스템을 개발했다. (r, c)는 r행 c열을 의미한다. 공기청정기는 항상 1번 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼 www.acmicpc.net python으로 제출했을때 시간초과 pypy3로 제출했을 때 통과 # Code ## 먼지 퍼뜨리기 def spread..
(Python) 백준 15686번: 치킨 배달
출처 : https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 www.acmicpc.net # Code from itertools import combinations ## 맵크기(N), 치킨집 최대 선택가능개수(M)..