728x90

Total

728x90

    [15686] 치킨 배달 (DFS, 브루트포스, 백트래킹)

    15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 분석 피자 배달 거리 (삼성 SW역량평가 기출문제 : DFS, 조합) 분석 karla.tistory.com 풀이 """ 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 집을 기준으로 정해지며, 각각의 집은 치킨 거리를 가지고 있다. 도시의 치킨 거리는 모든 집의 치킨 거리의 합이다. 임의의 두 칸 (r1, c1)과 (r2, c2) 사이의 거리는 |r1-r2| + |c1-c2|로 구한다. 도시에 있는 치킨집 중에서 최대..

    [12100] 2048 (Easy)

    12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 분석 네 방향으로 dfs 를 통해 다섯번 밀면서 보드의 최댓값 갱신 풀이 """ 2048 게임은 보드의 크기가 N×N 이다. 보드의 크기와 보드판의 블록 상태가 주어졌을 때, 최대 5번 이동해서 만들 수 있는 가장 큰 블록의 값 블록이 추가되는 경우는 없다 이동하려고 하는 쪽의 칸이 먼저 합쳐진다. 예를 들어, 위로 이동시키는 경우에는 위쪽에 있는 블록이 먼저 합쳐지게 된다 최대 5번 이동시켜서 얻을 수 있는 가장 큰 블록을 출력한다...

    [18808] 스티커 붙이기

    18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연 www.acmicpc.net 풀이 """ 가장 위, 왼쪽부터 붙임 자리없으면 시계방향으로 90도 회전 0도, 90도, 180도, 270도 회전해도 없으면 버림 노트북 세로, 가로 N,M(1 ≤ M ≤ 40), 스티커 개수 K(1 ≤ K ≤ 100) i번째 스티커가 인쇄된 모눈종이의 행의 개수와 열의 개수를 나타내는 Ri(1 ≤ Ri ≤ 10)와 Ci(1 ≤ Ci ≤ 10) Ri개의 줄에는 각 줄마다 모눈종이의 각 행을 나타내는 Ci개의 정수가 한 개 첫째 줄에 주어진 스티커들을 차례대로 붙였을..

    [15683] 감시 (DFS, 백트래킹, 브루트포스)

    15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 분석 cctv 방향 배열 생성 dfs를 통해 격자 탐색 격자를 복사한 뒤, cctv별 방향으로 연속 탐색 후 dfs 수행 그래프 복귀 (방문 처리 초기화) dfs 그래프 초기화 경로탐색(DFS) [1260번] DFS, BFS 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호 kar..

    [2004] 조합 0의 개수

    2004번: 조합 0의 개수 첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다. www.acmicpc.net 분석 조합 = nCm = n!/(m!*(n-m)!) 조합을 구해서 답을 내는 것이 아닌 조합 내의 0의 개수를 구하는 문제 끝자리가 0이라는 것은 10의 배수 10의 개수 = 2의 개수와 5의 개수 중 작은 것의 개수 (2와 5가 짝을 이뤄 10이되기 때문) n!가 가지고 있는 2의 개수 - m!이 가지고 있는 2의 개수 - (n-m)!이 가지고 있는 2의 개수 n!가 가지고 있는 5의 개수 - m!이 가지고 있는 5의 개수 - (n-m)!이 가지고 있는 5의 개수 중에 작은 수 풀이 """ n,m

    [1057] 토너먼트

    1057번: 토너먼트 김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 www.acmicpc.net 풀이 """ N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 한다. 만약 그 라운드의 참가자가 홀수명이라면, 마지막 번호를 가진 참가자는 다음 라운드로 자동 진출한다. 번호를 다시 배정받은 후에 한 명만 남을 때까지 라운드를 계속 한다. 일단 김지민과 임한수는 서로 대결하기 전까지 항상 이긴다고 가정한다. 1라운드에서 김지민의 번호와 임한수의 번호가 주어질 때, 과연 김지민과 임한수가 몇 라운드에서 대결하는지 출력 만약..

    [1038] 감소하는 수 (백트래킹, 조합, 재귀)

    1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net 분석 숫자를 덧붙이는 방법으로 한자리, 두자리, 세자리,... 의 감소하는 수 리스트 생성 재귀 n = int(input()) nums = [] def add(idx, num): # 자리수에 따라 증가 if idx == 1: nums.append(num) else: for i in range(num % 10): # 앞자리보다 작은 숫자들만 이어붙이기 add(idx-1, num*10 + i) for i in range(1, 11): for j in ..

    [1476] 날짜계산 (백트래킹)

    1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 풀이 """ 지구를 나타내는 수를 E, 태양을 나타내는 수를 S, 달을 나타내는 수를 M이라고 했을 때, 이 세 수는 서로 다른 범위를 가진다. (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19) 우리가 알고있는 1년은 준규가 살고있는 나라에서는 1 1 1로 나타낼 수 있다. 1년이 지날 때마다, 세 수는 모두 1씩 증가한다. 만약, 어떤 수가 범위를 넘어가는 경우에는 1이 된다. 1년이 준규가 사는 나라에서 1 1 1일때, 준규가 사는 나라에서 E S..

    [1676] 팩토리얼 0의 개수

    1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 """" N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500) """ import math n=int(input()) def fac(x): if x>1: return x * fac(x - 1) else: return 1 m=str(fac(n)) # m=str(math.factorial(n)) cnt=0 for i in range(len(m)): if m[-1-i]=='0': cnt+=1 else: break print(cnt)

    [1193] 분수찾기

    1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 분석 첫행 번호 나열 : 1,2,4,7,11,... 등차수열 ➔ 리스트 생성 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, ... ➔ 짝수일 때와 홀수일 때로 구분 풀이 """ 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. 1/1 - 1/2 - 2/1 - 3/1 - 2/2 - 1/3 - 1/4 - 2/3 - 3/2 - 4/1 - 5/1 - 4/2 - 3/3 - 2/4 X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 1 ≤ X ≤ 10,000,000 """ ..