파이썬 102

[백준 - Python] 2580 - 스도쿠

0. 문제 링크 https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 1. 풀이 방법 의외로 방법은 심플하다. 그냥 row, col, 3 * 3 구역 내에서 넣을 수 있는 숫자를 찾으면 된다. 그리고 그 방식으로 DFS를 했다. 근데 문제는 이런 방식으로 했을 때, 스도쿠가 전부 채워지지 않으면 다시 넣을 수 있는 숫자를 찾아야 하는 것... 분명 다른 방법이 있을텐데, 나는 해당 방법 말고는 딱히 떠오르지 않았다. 아무튼 이렇게 하니까 시간 초과가..

[백준 - Python] 16974 - 레벨 햄버거

0. 문제 링크 https://www.acmicpc.net/problem/16974 16974번: 레벨 햄버거 상근날드에서 오랜만에 새로운 햄버거를 출시했다. 바로 레벨-L 버거이다. 레벨-L 버거는 다음과 같이 만든다. 레벨-0 버거는 패티만으로 이루어져 있다. 레벨-L 버거는 햄버거번, 레벨-(L-1) 버거, www.acmicpc.net 1. 풀이 방법 해당 문제의 알고리즘은 구현이지만, 사실 가만 보면 분할 정복 문제와 다를 것이 없다. 방법은 별거 없다. 맨 왼쪽 빵보다 왼쪽에 있으면 패티가 없다. 중간 패티라면 왼쪽 패티 갯수를 넣는다. 왼쪽 빵과 중간 패티 사이라면 분할 정복으로 왼쪽만 분할 정복으로 넣는다. 오른쪽 빵과 중간 패티 사이라면 왼쪽 패티 갯수를 더하고 오른쪽을 햄버거를 분할 정..

[백준 - Python] 9663 - N-Queen

0. 문제 링크 https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 1. 풀이 방법 이 문제에서 고통을 받은 것은,,,python3로는 시간초과가 나는 것이다... 물론 스터디원 중에는 python3로도 푼 괴물이 있긴하다. 아무튼 나는 python3로는 안 풀려서 13, 14는 하드코딩을 했는데, 그 외의 방법은 내가 예전에 쓴 글에서 자세히 설명되어 있다. 알고리즘은 백트래킹을 사용했다. 2022.05.26 - [Computer Science/알고리즘] - [..

[백준 - Python] 16197 - 두 동전

0. 문제 링크 https://www.acmicpc.net/problem/16197 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, www.acmicpc.net 1. 풀이 방법 첫 번째로 동전의 위치를 찾았다. 만약 동전이 둘 다 범위 안에 있다면, 무난하게 동전을 움직이게 했고, 만약 벽이라면 움직이지 않고 다시 현재 위치에 있게 했다. 그리고 다시 deque에 넣었다. 만약 동전이 둘 다 범위 바깥이라면, 둘 다 떨어졌다는 의미이므로, continue를 했다. 만약 한 개만 떨어졌다면 그대로 반환을 했음 하지만 해당 경우에 동전이 겹..

[Pytorch] torch.utils.data.Dataset

1. torch.utils.data.Dataset torch.utils.data의 하위에 있는 Dataset은 Pytorch에서 데이터를 불러오고, 전처리하는 클래스입니다. 따라서 사용자가 자신의 데이터셋을 만들어 Pytorch에서 사용할 수 있도록 해줍니다. 이 클래스는 사용자 정의 데이터셋을 만들 수 있게 해주어 효율적인 데이터 로딩 및 전처리를 가능하게 합니다. 해당 클래스는 사용자가 직접 구현해야 합니다. torch.utils.data.Dataset을 상속받아 직접 구현합니다. 2. 파라미터 __init__(self, ...) : 해당 클래스의 인스턴스를 초기화 합니다. 이 메서드에서는 데이터셋에서 필요한 인자를 받습니다. 예를 들어, 데이터셋의 경로, 이미지 크기, 데이터 전처리 방법 등이 있을..

[백준 - Python] 16946 - 벽 부수고 이동하기 4

0. 문제 링크 https://www.acmicpc.net/problem/16946 16946번: 벽 부수고 이동하기 4 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 한 칸에서 다른 칸으로 이동하려면, 두 칸이 인접해야 한다. 두 칸이 www.acmicpc.net 1. 풀이 방법 우선 0이 있을 때, 해당 0과 인접한 0을 모두 읽었다. 당연히 방문 표시는 했고, 이때 방문한 0의 위치를 모두 좌표로 저장했다. 그리고 나서 다시 방문하면서 그룹 번호와 개수를 부여했다. 그룹 번호는 참고로 복소수의 허수 부분으로 대체했다. 이렇게 하면 특정 위치의 0에 대해서, 이 0이 속한 그룹의 0의 개수와 그룹 번호도 알 수 있다..

[Matplotlib - Python] Plotting with pandas and seaborn

Line Plots s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10)) s.plot() Series 데이터를 plot한 모습입니다. df = pd.DataFrame(np.random.randn(10, 4).cumsum(0), columns=['A', 'B', 'C', 'D'], index=np.arange(0, 100, 10)) df.plot() DataFrame을 그려넣은 모습입니다. Bar Plots fig, axes = plt.subplots(2, 1) data = pd.Series(np.random.rand(16), index=list('abcdefghijklmnop')) data.plot.bar(ax=axes[0], ..

[Matplotlib - Python] A Brief matplotlib API Primer

import matplotlib.pyplot as plt import numpy as np data = np.arange(10) data plt.plot(data) Figures and Subplots figure을 사용하여 matplotlib 객체를 넣을 수 있습니다. fig = plt.figure() ax1 = fig.add_subplot(2, 2, 1) ax2 = fig.add_subplot(2, 2, 2) ax3 = fig.add_subplot(2, 2, 3) fig add_subplot에서 해당 파라미터(n, x, y)의 의미는, n x n의 격자에서 x, y에 넣어라 라는 뜻입니다. ax3.plot(np.random.randn(50).cumsum(), 'k--') fig 3번째에 해당 그림을 ..

[Pandas - Python] Pivot Tables and Cross-Tabulation - pivot_table(), crosstab()

데이터는 다음과 같습니다. tips[:6] total_billtipsmokerdaytimesizetip_pct 016.991.01NoSunDinner20.059447 110.341.66NoSunDinner30.160542 221.013.50NoSunDinner30.166587 323.683.31NoSunDinner20.139780 424.593.61NoSunDinner40.146808 525.294.71NoSunDinner40.186240 이후 pivot_table을 day와 smoker에 대해 설정하고, 함수를 적용하면 tips.pivot_table(index=['day', 'smoker']) sizetiptip_pcttotal_bill daysmoker FriNo2.2500002.8125000.151..

[Pandas - Python] 지금까지의 예시 + 코드에 대한 설명

s = pd.Series(np.random.randn(6)) s[::2] = np.nan s 0 NaN 1 0.050009 2 NaN 3 0.852965 4 NaN 5 -0.023493 dtype: float64 랜덤으로 6개의 숫자를 생성한 후, s에 Series로 할당했고, 2배 간격으로 0, 2, 4의 row에 NaN을 넣었습니다. s.fillna(s.mean()) 0 0.293160 1 0.050009 2 0.293160 3 0.852965 4 0.293160 5 -0.023493 dtype: float64 s의 평균을 fillna를 통해 넣었습니다. 또 다른 예시를 봅시다. states = ['Ohio', 'New York', 'Vermont', 'Florida', 'Oregon', 'Nevad..