. '분류 전체보기' 카테고리의 글 목록 (8 Page)
본문 바로가기

분류 전체보기111

Stack 만들기 (Class에 관하여) 10828번: 스택 (acmicpc.net) 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 백준 문제이지만, 이번 시간에는 python에서 class를 지정하고, method 등을 만들어보는 시간이 될 것이므로 python 카데고리에 이 글을 포스팅하겠다. 우선, Class 란 무엇인가? Class는 일종의 템플릿 혹은 틀(Frame)이라고 보면된다. 어떤 함수가 서로 다른 상황에서 반복적으로 쓰여진다고 가정할 때, 그것을 하나하나 만드는 것은 굉장히 비효울적인 일이 될 것이다. 또한, 그 .. 2020. 12. 19.
색종이를 곱게 접어서 (백준 2630:색종이 만들기) 2630번: 색종이 만들기 (acmicpc.net) 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 딱 봐도 Z랑 비슷하지 않는가? 배열 안의 1을 카운트해서 1의 갯수가 N x N이 아닌경우, 4분할을 하여 다시 1을 카운트 해보고 아니면 다시 4분할 하는 식으로 가자. 우선 입력값을 받고, 재귀함수의 기본꼴을 만들자. 일단 해당 색종이의 현재 좌표를 알아야하기 때문에 x, y를 넣어준다. N = int(sys.stdin.readline()) paper = [list(map(int.. 2020. 12. 18.
섞고 섞고 돌리고 섞고 (백준 2470 : 두 용액) 2470번: 두 용액 (acmicpc.net) 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net - 대전략: 요소를 오른차순으로 나열하고, 제일 작은 것은 min, 큰 것을 max로 하자. (min과 max는 인덱스 값이다.) 그리고 두개를 더했을 때, 음수면은 min을 한칸 위로 옮기고 양수면 max를 한칸 밑으로 내린다. min과 max를 더한 절대값 ( abs(sol[min] + sol[max]))이 제일 낮았을 때, min과 max을 저장하고, 양 합의 절댓값이 더 낮은.. 2020. 12. 18.
아~ 와이파이 잘되는 집을 찾으시는구나? (백준 2110 : 공유기 설치) 2110번: 공유기 설치 (acmicpc.net) 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net N : 집 갯수, C : 공유기 갯수 우선, 집 좌표를 받아서 sort하자 N, C = map(int,sys.stdin.readline().split()) house = [int(sys.stdin.readline()) for _ in range(N)] house.sort() 딱봐도 맨 처음과 맨 끝 좌표에는 좌표기를 설치해야될 것 같지 않는가. (반례가 있나? .. 2020. 12. 18.
나무를 자르다니 나무해 (백준 2805:나무자르기) 2805번: 나무 자르기 (acmicpc.net) 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M을 www.acmicpc.net 나무의 수 : N 원하는 나무의 길이 : M 상근이가 환경에 관심이 많기 때문에 최소한의 나무만 자르고 싶다고 한다. 정말 기특하지 아니할 수 없다. 상근이를 위해서 열심히 풀어보자. - 대전략 항상 수능을 공부할 때 들었던 말이 있다. "출제자의 의도를 파악하라." 다행히도 백준의 출제자의 의도는 알고리즘 분류에 나타나있다. 이 문제의 알고리즘 분류는 이분 탐색이다. 이분.. 2020. 12. 18.
야구는 9회말 2아웃부터 (백준2053:숫자야구) 2503번: 숫자 야구 (acmicpc.net) 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 어렸을 적에 많이 했던 숫자 야구이다. 그래도 나름 잘했던 게임이라 생각하는데 이런식으로 뒤통수맞을 줄이야. - 대전략 : 생각하고 있을 답의 총 개수라면, 결국 경우의 수를 전부 뽑아내어 간추릴 수 밖에 없다. 첫번째 대답에서 1스트라이크 1볼이라고 했으니, 1개는 자릿수와 숫자가 맞고, 1개는 자릿수가 맞고, 1개는 틀렸을 경우의 수를 전부 뽑아낸 뒤, 뒤의 조건에 대입하여 소거시킬 수 밖에 없다. 일단, 입력.. 2020. 12. 17.
아래로부터의 혁명 (백준 9095 : 1, 2, 3 더하기) 9095번: 1, 2, 3 더하기 (acmicpc.net) 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net - 대전략 : 예를 들어 입력값이 5(N)라고 하자. 일단 1부터 올라가야 할 것이다. 그러면 [1 1 1 1 1]이 될 것이고 이 조합의 수는 1개이다. 그다음은 1 2개를 합쳐서 [2 1 1 1]을 만들고 이 조합의 수는 4! (요소의 갯수) / 3! (중복된 숫자의 갯수) 가 된다. 리스트 안의 1, 2, 3의 갯수를 리스트화 하자. arr = [a b c]에서, a는 3의 갯수, b는 2의 갯수, c는 1의 갯수가 된다. 즉, [1 1 1 1 1] 은 arr=[0 0 5] 가 되고, [2 2 1.. 2020. 12. 17.
여인천하 (백준 9669번 : N-Queen) 9663번: N-Queen (acmicpc.net) 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 재귀알고리즘의 대표 문제 중 하나인 퀸 문제다. 외판원 순환2랑 비슷하지만, 경우의 수가 더 많고 공간적으로 생각할 것이 더 많은 문제이다. - 대전략 : N * N 으로 체스판을 만들고, T/F로 구분한다. (퀸을 배치했거나 갈 수 없는 곳은 F) 우선 y=0인 곳에 퀸을 놓는다. 그 후, 다음 y열~N-1열에서 같은 x방향, 대각선을 모두 False한다. 그리고 다음 y열에서 x=0행부터 N-1행까지 True를 탐색하고, .. 2020. 12. 16.
이 세상의 모든 세일즈맨을 위하여 (백준 10971번 : 외판원 순회2) 10971번: 외판원 순회 2 (acmicpc.net) 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net - 대전략 이 행렬에서 중요한 것은 도시의 시작점인 y=0(x[0])이다. 결국 이 문제도 N-Queen과 같은 문제가 아닐까. x=i, y=0 을 시작점으로 하고, 0 이 아닌 곳에 가는 경우의 수를 구현해본다. 그러면 for로 y=0을 돌린다. 그리고 안에서 재귀함수로 실행시켜야 할 것 같다. 만약 (0,0)에서 시작한다면 각각 (0,1) (0,2) (0,3) .. 2020. 12. 15.
날씨의 아이 (백준 2468번 : 안전 영역) 2468번: 안전 영역 (acmicpc.net) 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net - 대전략 (0,0)부터 탐색을 시작한다. 만약 (0,0)이 T(그림 상 흰색)라면 카운트 (안전영역) 갯수를 올리고, dx dy로 상하좌우에 방문해본다. 만약 경계선이거나 F라면은 그냥 놔두고, T인 곳을 방문한다. (재귀함수 실행) 그런데 여기는 카운트를 올리면 안되지 않는가? (이어진 곳이기 때문에) 이를 어떻게 처리할 것인가. 시작은 이중 for문으로 돌리고 탐색만 bfs로 처리할 것인가? 일단 시작해보자. 시작은.. 2020. 12. 15.
ㅋ (백준 1074번 : Z) 1074번: Z (acmicpc.net) 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, N > 1이 라서 www.acmicpc.net 일단 N이 2가 될때까지 쪼개야 한다. 이를 재귀로 표현하면 다음과 같다. if N = 2: else: zet(N-1,r,c): 그리고 (r,c)가 몇 사분면에 있는지가 필요하다. ( Z방향으로 n사분면을 정한다.) 만약 첫 시도에서 (r,c)가 1사분면에 있지 않다면 바로 구할 수 있으나, 1사분면에 있다면 한번 더 쪼개줘야 한다. def zet(N, x, y): if x > N // 2: i = 1 else: .. 2020. 12. 14.
OX퀴즈 보호되어 있는 글 입니다. 2020. 12. 11.
직사각형에서 탈출 보호되어 있는 글 입니다. 2020. 12. 11.