본문 바로가기

알고리즘

(138)
[알고리즘] 백준 13913 숨바꼭질4 / python https://www.acmicpc.net/problem/13913 13913번: 숨바꼭질 4 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 �� www.acmicpc.net ✔ 풀이과정 bfs로 탐색을 할거니까 자식노드를 차례로 모두 방문한다. 방문하면서 K값인지 아닌지 확인한다. dist는 노드까지 가는데 몇초걸리는가?를 의미한다. 예를들어 5의 자식노드인 4, 6, 10의 dist는 1이므로 4, 6, 10까지 걸리는 최소 시간은 1인것이다. dist 배열 👉 dist[현재 노드] = 걸리는 시간(초) move 배열 👉 mo..
[알고리즘] 백준 1644 소수의 연속합 / pyhton https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두 www.acmicpc.net 검색해서 에라토스테네스의 체 코드를 이용해 N이하의 소수배열을 구하고(여기를 참고) 2003번문제와 동일한 방법으로 연속된 합을 구했다. def isPrime(n): a = [False,False] + [True]*(n-1) for i in range(2,n+1): if a[i]: primes.append(i) for j ..
[알고리즘] 백준 1806 부분합 / python https://www.acmicpc.net/problem/1806 1806번: 부분합 문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. www.acmicpc.net N, S = map(int, input().split()) A = list(map(int, input().split())) left, right, hap, result, temp = 0, 0, A[0], 0, 0 while left = S: temp = right - left + 1 if result == 0: result = temp else: result = min(result, temp) ..
[알고리즘] 백준 2003 수들의 합 2 / python https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1≤N≤10,000), M(1≤M≤300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net left, right를 설정해놓고 진행해나가는데 right는 left와 같거나 커야한다. left가 증가할 경우의 예외처리를 처음에 못했는데 left가 right보다 커지면 right를 left와 같게 해줘서 그 인덱스부터 시작할 수 있도록 해준다. (처음 시작하는 것 처럼) N, M = map(int, input().split()) A = list(map(int, in..
[알고리즘] 백준 2580 스도쿠 / pyhton, 백트랙킹 https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net ✔ 풀이과정 스도쿠 규칙은 같은 행, 같은 열, 같은 3x3사각형 내에 1~9사이의 숫자가 겹치지 않게 배치하는 것이다. 이걸 시간초과가 나지 않게 확인하기 위해서 c1, c2, c3의 이차원 배열을 만들어서 0~8행열사각형에 1~9숫자가 존재하는지 직관적으로 체크해놓고 스도쿠 전체를 돌면서 규칙에 맞는지 확인한다. 스도쿠 이차원 배열을 돌때는 좌표값이 아닌 0, 1, 2, ...80 까지의 순서..
[알고리즘] 백준 9663 N-Queen / python, 백트랙킹 https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net ✔ 풀이과정 같은 열과 대각선에 안겹치게 퀸을 놓는 게임을 구현한다. 먼저, 같은 열을 체크한다. ck배열은 크기가 N이고, 퀸을 놓은 위치의 열을 표시한다. ck_col[2] = 1 대각선을 체크한다. 대각선의 총 개수는 7개 이므로 ck배열의 크기는 2 * N - 1 이다. 퀸을 놓은 대각선의 규칙을 찾아보면 위치가 행=1, 열=2 일 때 3이므로 ck_dig[행+열] = 1로 바꾼다. 반대쪽 대각선을 체크한..
[알고리즘] 백준 1248 맞춰봐 / python, 백트랙킹 https://www.acmicpc.net/problem/1248 1248번: 맞춰봐 문제 규현이는 멍청하다. 왜냐하면, 1~10까지 수 밖에 모르기 때문이다. 어느 날 규현이 옆을 지나가던 태석이가 규현이를 보고 이렇게 외쳤다. "빵빵!!" 규현이는 "아하!" 하면서 세상에는 빵이란 www.acmicpc.net ✔ 풀이과정 첫째 줄에 수열의 크기 N이 주어진다. 처음 N개의 문자는 부호 배열의 첫 번째 줄에 해당하고, 다음 N-1개의 문자는 두 번째 줄에 해당한다. 예제에서 첫번째줄 : -+0+ / 두번째줄 : +++ / 세번째줄 : -- / 네번째줄:+ 이다. A = [-2, 5, -3, 1]일 때, 부호의 뜻은 첫번째줄 : A[0], A[0]+A[1], A[0]+A[1]+A[2], A[0]+A[1]..
[알고리즘] 백준 1339 단어수학 / python https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net ✔ 풀이과정 원래는 순열을 이용하는것같은데.. 파이썬은 딕셔너리를 사용해야지 시간초과가 안나나보다😢 딕셔너리에 각 숫자의 자리값을 저장해놓고 내림차순으로 정렬한다음, 제일 큰 수인 9부터 곱해준다. 이 예제로 설명하자면 dictionary = { G:100, C:1010, F:1, A:10000, D:100, E:10, B:1 } 이렇게 자리값을 10의 n승으로 저장한다. sort_list ..