본문 바로가기

728x90

Python

[백준알고리즘] 1920번: 수 찾기 -Python [백준알고리즘] 1920번: 수 찾기 -Python https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수들의 범위는 int 로 한다. www.acmicpc.net 이분 탐색 문제로 분류되어 있다. 하지만 딕셔너리를 통해 해시테이블을 이용했다! import sys N = map(int, sys.stdin.readline()) keyList = list(map(int, sys.stdin.readline.. 더보기
[백준알고리즘] 2740번: 행렬 곱셈 -Python [백준알고리즘] 2740번: 행렬 곱셈 -Python https://www.acmicpc.net/problem/2740 2740번: 행렬 곱셈 첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개가 차례대로 주어진다. N과 M, 그리고 K는 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다. www.acmicpc.net 분할 정복까지는 아닌 것 같지만 소개에도 "행렬의 거듭제곱을 계산하기 전에 먼저 풀어야 할 문제"라고 나와있다. 행렬의 곱셈을 할 줄만 안다면 코드를 짜는 건 쉽기 때문에 코드만 올린다. 이 문제 역시.. 더보기
[백준알고리즘] 14888번: 연산자 끼워넣기 -Python [백준알고리즘] 14888번: 연산자 끼워넣기 -Python https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수이다. www.acmicpc.net 백트래킹 문제이다. 왜지? 그냥 DFS 문제이다. 단계별 풀기에는 분명 백트래킹으로 되어있는데 페이지 밑에 알고리즘 분류에는 또 브포로 나와있다.. 주절주절했듯이 그냥 모든 경우를 찾아야한다. 가지치기(pruning)할 경우를 나눈다고 해.. 더보기
[백준알고리즘] 2580번: 스도쿠 -Python [백준알고리즘] 2580번: 스도쿠 -Python https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루어진 정사각형 판 위에서 이뤄지는데, 게임 시작 전 몇 몇 칸에는 1부터 9까지의 숫자 중 하나가 쓰여 있다. 나머지 빈 칸을 채우는 방식은 다음과 같다. 각각의 가로줄과 세로줄에는 1부터 9까지의 숫자가 한 번씩만 나타나야 한다. 굵은 선으로 구분되어 있는 3 www.acmicpc.net 2020.03.11 거의 유사하긴 하나, 새로 푼 코드를 아래에 추가했다. 와 이거 푸는.. 더보기
[백준알고리즘] 15650번: N과 M (2) -Python [백준알고리즘] 15650번: N과 M (2) -Python https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. www.acmicpc.net 저번에 풀었던 N과 M (1)의 다음 문제이다. 조건을 보면 "고른 수열은 오름차순이다."가 추가되었다. 별로 추가된 것도 없고 그냥 풀었다. itertools를 쓰면서 이 추가된 조건을 처리하려 하는 것보다 그냥 짜는 게 훨씬 쉬워 보여서 그냥 짰다. 얼른 백 트랙킹 마무리 지어야겠다. import sys def testCa.. 더보기
[백준알고리즘] 15649번: N과 M (1) -Python [백준알고리즘] 15649번: N과 M (1) -Python https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. www.acmicpc.net 오랜만에 백준에 들어가니 BackTracking이 있었다. 예전에도 있었나 모르겠지만 처음 본 것 같아서 풀어봤다. 근데 1번째 문제라 그런지 백트랙킹 문제라기보다는 DFS 같았다. 그래서 그냥 DFS로 풀었다. :) 두 가지 방법으로 풀었는데 첫 번째는 DFS로 풀었고 두 번째 풀이는 itertools 모듈을 이용해서 풀었다.. 더보기
[백준알고리즘] 7568번: 덩치 -Python [백준알고리즘] 7568번: 덩치 -Python https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x,y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x,y), (p,q)라고 할 때 x>p 그리고 y>q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56,177), (45,165) 라고 한다면 A의 덩치가 B보다 큰 www.acmicpc.net 시험 끝난 기념으로 오랜만에 알고리즘을 풀어야지~라고 생각하고 쉬운 브포부터 건드려봤다. 이번.. 더보기
[백준알고리즘] 1780번: 종이의 개수 -Python [백준알고리즘] 1780번: 종이의 개수 -Python https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다. 만약 종이가 모두 같은 수로 되어 있다면 이 종이를 그대로 사용한다. (1)이 아닌 경우에는 종이를 같은 크기의 9개의 종이로 자르고, 각각의 잘린 종이에 대해서 (1)의 과정을 반복한다. 이와 같이 종이를 잘랐을 때, -1로만 채워진 종이의 개수, 0으 www.acmicpc.net 추가) 이전에 풀었던 문제이지만 한 번 더 풀어봤다. 사실 쓴 코드 중에서 제.. 더보기

728x90