[백준14465] 소가 길을 건너간 이유 5
·
알고리즘 문제풀이
www.acmicpc.net/problem/14465 14465번: 소가 길을 건너간 이유 5 첫 줄에 N, K, B (1 ≤ B,K ≤ N)가 주어진다. 그 다음 B줄에는 고장난 신호등의 번호가 하나씩 주어진다. www.acmicpc.net import sys input = sys.stdin.readline N,K,B = map(int,input().split()) arr = [0]*(N+1) for i in range(B): arr[int(input())] = 1 s=[] cnt = 0 for i in range(N+1): cnt+=arr[i] s.append(cnt) answer = B for i in range(N+1-K): answer = min(answer,s[i+K] - s[i]) print..
[백준1747] 소수&팰린드롬
·
알고리즘 문제풀이
www.acmicpc.net/problem/1747 1747번: 소수&팰린드롬 어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다. 어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고, www.acmicpc.net 풀이 문제에서 요구하는대로 N보다 큰 소수를 찾고 그 소수리스트 중 팰린드롬 수를 찾으면 된다. 소수를 찾는 방법은 에라토스테네스의 체를 참고한다 에라토스 테네스의 체는 간단히 설명해서 1~N까지 반복하면서 배수들을 모두 제거하는 것이다. 소수는 어떤 숫자의 배수가 아니기 때문이다. 이렇게 소수리스트를 만든 후 찾는 범위의 숫자 중 작은것부터 하나씩 뽑아 팰린드롬인지 검사한..
[백준2872] 우리집엔 도서관이 있어
·
알고리즘 문제풀이
www.acmicpc.net/problem/2872 2872번: 우리집엔 도서관이 있어 상근이는 컴퓨터 공학의 일인자가 되기 위해 책을 매우 많이 구매했다. 하지만, 집에 책장이 없어서 책을 탑처럼 쌓아놓고 있다. 오늘은 오랜만에 상근이가 집에서 휴식을 취하는 날이다. 상근 www.acmicpc.net 풀이 정렬문제인줄 알고 한참 헤맸다. 또한 문제에서 요구하는대로 그대로 구현하니 시간초과가 떳다. 법칙을 찾아야한다. 45123 순서로 책이 들어온다고 하면, 45는 그대로 두고 123을 위로 올려야 할것이다. 3 2 1 순으로 뽑아야 겠지만 순서는 중요하지 않다. 책을 뽑는 횟수를 세는것이기 때문에 3개라는게 중요하다. 12453 이면 어떨까? 이것도 45만 남겨두고 나머지를 다 위로 올리는 작업을 해야..
[백준3980] 선발 명단
·
알고리즘 문제풀이
www.acmicpc.net/problem/3980 3980번: 선발 명단 각각의 테스트 케이스에 대해서, 모든 포지션의 선수를 채웠을 때, 능력치의 합의 최댓값을 출력한다. 항상 하나 이상의 올바른 라인업을 만들 수 있다. www.acmicpc.net 풀이 S의 ij는 i번 선수가 j번 포지션에서 뛸 떄의 능력이다 visited에 이미 방문한 포지션을 체크한다. 방문한 포지션, 자신이 뛸 수 없는 포지션을 제거하고 가능한 포지션들을 재귀적으로 호출한다. 즉, 백트래킹 기법을 사용해 모든 경우를 탐색한다. 함수의 매개변수는 (맵, 선택한 인원, 능력치합, 방문체크)로 구성한다. 시간복잡도 재귀가 최대로 깊어진다고 해보자 가능한 포지션이 최대 5개이고 11명이 있다. 그러므로 재귀는 최대 55번보단 작게 ..
[프로그래머스lv.3] 정수 삼각형
·
알고리즘 문제풀이
programmers.co.kr/learn/courses/30/lessons/43105 코딩테스트 연습 - 정수 삼각형 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 programmers.co.kr 풀이 깊이를 i 라고 봤을 때 i-1 번째 깊이엣 ㅓ어떤 숫자를 선택했느냐에 따라 결과값이 달라진다. 즉 dp 문제이다. 깊이를 i, i번째 배열에서의 인덱스를 j라고 해보자 i번째깊이의 j번째 수의 합의 최대값은 무엇일까? 답은 i-1번째 깊이의 j-1번째수까지의 최대값과 j번째수까지의 최대값중 큰 값 + i번째깊이의 j번째 수일 것이다. dp[i][j] = i번째 깊이의 j번째 인덱스가 가지는 합의 최댓값이다. 즉 dp[i][j] = max(dp[..
[프로그래머스lv3] [2020 카카오 인턴십] 보석 쇼핑
·
알고리즘 문제풀이
programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 풀이 gems에서 보석을 차례대로 반복문에 넣는다. 큐에 차례때로 보석을 넣어준다. 또한 보석의 수를 효율적으로 계산하기 위해 dict를 따로 만들어 요소의 수를 기록한다. set을 통해 큐에 모든 보석이 들어갔는지 확인한다. 모든 요소가 들어갔다면 현재 상태를 저장한다. 나중에 답 비교를 위해 우선순위 큐에 [큐길이, 시작위치] 로 저장한다. 큐의 첫번째 보석의 수가 2 이상이라면 현재 큐를 한 번 pop를 해주고 해당 보..
[프로그래머스lv.3] 순위
·
알고리즘 문제풀이
programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 풀이 그래프를 그려본다. 그래프를 그려보고 경로가 다른 노드들과 모두 이어져 있는 노드를 찾는다. 4는 모든 녀석과 이어져 있다. 1은 3을 모르고 2는 6을 모르고 3은 1을 모르고 5는 3을 모르고 6은 2를 모른다. 여기서 4라는 모든 경로와 이어진 노드를 어떻게 찾을 수 있을까? 플로이드 와샬을 활용하면 된다. 플로이드 와샬은 모든 노드의 최단거리를 찾아준다. 그 점을 이용해서 노드가 이어져 있는지를 확인한다. 최단거리가 존재하지 않다면 경로가 없다는 것이다. 백준의 [245..
[프로그래머스.lv3] 입국심사
·
알고리즘 문제풀이
programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr 풀이 (시간초과) 심사관이 일이 끝나는 시간 리스트를 만든다. 각 심사관의 시간만큼 더한 후 가장 일이 일찍 끝나는 심사관을 찾는다. 그 심사관에게 일을 맡긴다. 해당 심사관의 일이 끝나는 시간을 늘려준다. 심사관 수를 t라고 했을 때 한명을 처리하는데 가장 작은 심사관을 찾기 때문에 O(t)만큼 걸린다. n명을 처리하니 시간복잡도는 O(tn)이다. t는 최대 100000이고 ..
[백준2262] 토너먼트 만들기
·
알고리즘 문제풀이
www.acmicpc.net/problem/2262 2262번: 토너먼트 만들기 월드시에서는 매년 n명의 사람들이 모여 월드 크래프트라는 게임의 토너먼트 대회를 치른다. 이 게임은 특성상 실력만이 승패를 좌우하기 때문에, 아무리 실력이 엇비슷한 사람이 시합을 치러 www.acmicpc.net 풀이 처음에는 DP인가 생각했다. 결국 못풀어 답을 참고하니 간단한 그리디 문제였다. 붙는 선수끼리의 랭킹차이가 적어야 한다. 이기는 선수(여러번 붙는 선수)는 랭킹이 높은 선수이다. 따라서 낮은 랭킹이 올라가서 여러번 붙으면 안된다. 올라가는 선수들은 랭킹이 높은 선수들이기 때문에 차이값이 많아진다. 즉 랭킹이 낮은 선수부터 시합을 뛰게해 제거한다. 랭킹이 제일 낮은 선수를 찾고 양 옆의 선수중 차이가 적은 선수랑..
[백준1958] LCS 3
·
알고리즘 문제풀이
www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 개념 LCS는Longest Common Subsequence의 줄임말로,공통 부분 문자열 중 가장 길이가 긴 문자열을 말합니다. 이 때, Substring과 Subsequence와의 차이점을 알 필요가 있습니다. Substring : 전체 문자열에서연속된부분 문자열 Subsequence : 전체 문자열에서꼭 연속된 문자열인 것은 아닌부분 문자열 서로 다른 문자열 중에..
[백준1114] 통나무 자르기
·
알고리즘 문제풀이
1114번: 통나무 자르기 첫째 줄에 L, K와 C가 주어진다. L은1,000,000,000보다 작거나 같은 자연수이고, K는 통나무를 자를 수 있는 위치의 개수이다. K와 C는 10,000보다 작거나 같은 자연수이다. 둘째 줄에 통나무를 자를 수 www.acmicpc.net 풀이 처음 생각(오답) : 제일 긴 토막이 짧도록 만드려면 나무토막중 제일 긴 토막을 우선적으로 잘라야 한다. 우선순위 큐를 이용해 제일 긴 토막을 차례대로 뽑아낸다. 우선순위 큐는 [나무길이,나무시작점,나무끝지점] 으로 저장한다. 길이를 최소로 만들어야 하기 때문에 나무의 최대한 중간에 있는 위치를 잘라야 한다. 이분탐색을 통해 나무범위에 해당하는 후보중 중간위치((나무시작점+나무끝지점) // 2)와 가까운 인덱스를 찾는다. 이것..