no image
[파이썬] 소프티어 비밀메뉴
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트를 방문하여 문제를 확인해주세요. 나의 풀이 완전 탐색으로 풀었다. 코드를 다시 보니 굳이 리스트에 담아뒀다가 확인할 필요 없이 for문에서 바로 확인하는 것이 더 나았을 것 같다. 조작법 앞뒤로 다른 버튼 조작이 있어도 비밀 메뉴로 인정된다. 처음에 위 문항을 조작법 사이에 어떤 버튼이 있어도 상관 없다는 것으로 이해하고 풀었어서 시간이 좀 걸렸다. import sys # 레시피, 유저 입력, 버튼 수 secret_num, seq_num, button_num = map(int, input().split()) # 레시피 / 유저 정보 입력 secret = list(map(int, input().split(..
2022.05.16
no image
[파이썬] 소프티어 전광판
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트를 방문하여 문제를 확인해주세요. 나의 풀이 전광판에 해당되는 전구를 미리 dict로 지정해서 풀었다. 이때, A -> B로 바뀔 때, A에만 있는 전구는 꺼야 하고 B에만 있는 전구는 켜면 된다. import sys # 맨 위 idx를 0, 왼쪽을 1, 오른쪽을 2 아래를 3 ... 방식으로 숫자를 만들 경우 필요한 전구 미리 정의 num2lamp = { "0" : set([0, 1, 2, 4, 5, 6]), "1" : set([2, 5]), "2" : set([0, 2, 3, 4, 6]), "3" : set([0, 2, 3, 5, 6]), "4" : set([1, 2, 3, 5]), "5" : set(..
2022.05.14
no image
[파이썬] 소프티어 회의실 예약
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트를 방문하여 문제를 확인해주세요. 나의 풀이 입출력이 까다로워서 조건에 맞게 수정하느라 시간이 꽤 걸렸다. 시간 정보 - idx 정보를 변환해가면서 풀었는데 [9, 10], [10, 11] 처럼 그냥 시간 형태로 입력에 넣었으면 더 간단하게 풀 수 있었을 것 같다. import sys # 시간 - idx 변환 hour = dict(zip(range(9, 19), range(10))) idx2hour = dict(zip(range(10), range(9, 19))) # 방/미팅 수 room_num, meeting_num = map(int, input().split()) # 방 이름 입력 room_name =..
2022.05.13
no image
[파이썬] Type hint 사용법
Python에도 Type을 써야 하나? Python은 동적 타이핑 언어기 때문에 함수 및 클래스의 parameter type을 명시해주지 않아도 된다. 따라서 C++의 templates나 JAVA에서의 generic 없이도 함수 및 클래스를 type에 상관없이 재사용할 수 있다. C++로 예를 들면 template을 통해서 type을 임의로 선언해뒀다가 호출 시에는 type을 명시해줘야 한다. 이는 template으로 임시로 부여한 type을 대신할 명시적인 type을 입력하는 것으로 정적 타이핑 언어인 C++에선 필수적이다. #include #include using namespace std; template T sum(T a, T b){ // template으로 임의 type 할당 return a +..
2022.05.13
no image
[파이썬] 백준 1707번 이분 그래프
1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net 시간 제한 2초 메모리 제한 256MB 문제 그래프의 정점의 집합을 둘로 분할하여, 각 집합에 속한 정점끼리는 서로 인접하지 않도록 분할할 수 있을 때, 그러한 그래프를 특별히 이분 그래프 (Bipartite Graph) 라 부른다. 그래프가 입력으로 주어졌을 때, 이 그래프가 이분 그래프인지 아닌지 판별하는 프로그램을 작성하시오. 입력 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 ..
2022.05.12
no image
[파이썬] 백준 2206번 벽 부수고 이동하기
2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 시간 제한 2초 메모리 제한 192MB 문제 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 만약에 이동하는 도중에 한 개의 벽을 부수고 이동하는..
2022.05.11
no image
[파이썬] 백준 16928번 뱀과 사다리 게임
16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 시간 제한 1초 메모리 제한 512MB 문제 뱀과 사다리 게임을 즐겨 하는 큐브러버는 어느 날 궁금한 점이 생겼다. 주사위를 조작해 내가 원하는 수가 나오게 만들 수 있다면, 최소 몇 번만에 도착점에 도착할 수 있을까? 게임은 정육면체 주사위를 사용하며, 주사위의 각 면에는 1부터 6까지 수가 하나씩 적혀있다. 게임은 크기가 10×10이고, 총 100개의 칸으로 나누어져 있는 보드판에서 진행된다. 보드판에는 1부터 1..
2022.05.09
no image
[파이썬] 백준 7576번 토마토
7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 시간 제한 1초 메모리 제한 256MB 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽,..
2022.05.06
no image
[파이썬] 백준 2667번 단지번호붙이기
2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 시간 제한 1초 메모리 제한 128MB 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 ..
2022.05.03
no image
[파이썬] 백준 12015번 가장 긴 증가하는 부분 수열 2
12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net 시간 제한 1초 메모리 제한 512MB 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai..
2022.04.29
no image
[파이썬] 백준 2110번 공유기 설치
2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 시간 제한 2초 메모리 제한 128MB 문제 도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x1, ..., xN이고, 집 여러개가 같은 좌표를 가지는 일은 없다. 도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하..
2022.04.27
no image
Gradient Descent(경사 하강법)에서 Learning Rate(학습률)를 작게 설정하는 이유
이유? 딥러닝은 Loss function의 최적해를 탐색하기 위해서 Gradient Descent(경사 하강법)를 활용한다. 경사 하강법은 반복적으로 $\theta$를 $\theta+\Delta\theta$ 로 수정하며 최적해를 얻는 방법이고, Loss 함수의 1차 테일러 근사식이기도 하다. 근사식의 오차를 줄이기 위해선 Learning Rate(학습률)이 작아야 하고, 이것이 바로 학습률을 작은 값으로 설정하는 이유다. 수식으로 확인하기 $\theta+\Delta\theta$ 에서의 Loss는 다음과 같이 표현할 수 있다. $$L(\theta + \Delta\theta)$$ 테일러 전개의 기본 형태는 $f(x) = \sum_{n=0}^\infty \frac{f^{(n)}(a)}{n!} (x-a)^n$ ..
2022.04.26