본문 바로가기

728x90
반응형

백준

(8)
[Python] 백준 18870번, 좌표 압축 1. 알고리즘 여기를 클릭하면 문제를 확인할 수 있다. 문제에 따르면 원본 데이터에서 중복되는 수를 없애고 숫자가 작은 순서대로 번호를 매겨 저장한 압축 데이터를 생성한다. 그런 다음에 원본 데이터의 값들을 압축 데이터에 있는 값으로 변환해 출력해주면 된다. 2. 코드 import sys IN = sys.stdin.readline if __name__ == "__main__": N = int(IN()) arr = list(map(int, IN().split())) sort_arr = sorted(set(arr)) # 중복된 수 제거 후 정렬 dic = {sort_arr[i]: i for i in range(len(sort_arr))} # 좌표 압축 사전화 s = "" # 문자열로 연결 for i in a..
[Python] 백준 14002번 문제, 가장 긴 증가하는 부분 수열 4 https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 수열이 주어졌을 때 가장 긴 증가하는 부분 수열을 구하는 문제이며, 시리즈 중 4번째 문제이다. 전과 달라진 점은 둘째 줄에 부분 수열을 출력해야 하며, 첫째 줄은 기존과 마찬가지로 부분 수열의 길이를 출력하면 된다. 동적 프로그래밍으로 풀이 가능하기 때문에 dp를 선언 한 다음에 A의 순서대로 2차원 배열 arr를..
[Python] 백준 12851번 문제, 숨바꼭질 2 https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net 수빈이가 동생과 숨바꼭질 하고 있는데 수빈이가 동생을 찾는 가장 빠른 시간이 몇 초 후이며, 가장 빠른 시간으로 찾는 방법이 몇 가지인지 구하는 문제이다. 수빈이가 X(0 ≤ X ≤ 100,000)에 있다고 가정 했을 때, 1초에 { X-1, X+1, 2X }으로 이동할 수 있다. 이렇게 몇 초후에 동생이 있는 K(0 ≤ K ≤ 100,000)에 도달하는지 구..
[JAVA] 백준 2822번 문제, 점수 계산 https://www.acmicpc.net/problem/2822 2822번: 점수 계산 8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문 www.acmicpc.net 2차원 배열을 사용했기 때문에 Arrays.sort()에서 두번째 매개변수에 조건식을 써줘야 한다. 이를 통해서 다차원 배열도 원하는 조건으로 정렬이 가능하다. 다차원 배열을 테이블로 만들자면 다음과 같다 0 1 0 점수1 1 1 점수2 2 2 점수3 3 행이 1차원 배열이고 열이 2차원 배열을 뜻한다. 위 배열을 정렬하기 위해서는 [i][0]번째 값들을 비교해야 한다. 그래서 (int[]..
[JAVA] 백준 2751번 문제, 수 정렬하기 2 www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 문제에서 중요하게 봐야 할 키워드는 '주어진 입력의 범위는 -1,000,000 ~ 1,000,000인 정수', '수는 중복되지 않는다'입니다. 중복 없이 입력받기 때문에 해당하는 수가 들어왔는지, 아닌지만 판단하면 됩니다. 따라서 크기 200만 인 Boolean 타입의 배열 arr[]를 만들어 값이 들어왔을 경우 True값을 넣어줍니다. 그래서 위의 작업을 첫 번째 for문에서 수행합니다. 두 번째..
[JAVA] 백준 9251번 문제, LCS (최장 공통 부분 수열) https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 최장 공통 부분 수열은 두 문자열에서 가장 긴 공통 부분을 구하는 것이다. 예로 들자면 두 문자열 "ACAYKP"와 "CAPCAK"의 최장 공통 부분 수열은 "ACAK"이다. 이론은 굉장히 간단하다. "ACAYKP"를 기준으로 잡고 한 글자씩 "CAPCAK"와 비교해주면 된다. 최장 공통 부분의 길이를 알아내기 위해서는 [첫번째문자열][두번째문자열]의 ..
[JAVA] 백준 9660번 문제, 돌 게임 6 https://www.acmicpc.net/problem/9660 9660번: 돌 게임 6 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1,000,000,000,000) www.acmicpc.net 돌 게임 6은 데이터 범위가 증가했으며 게임 조건이 더 추가됐다. 무한대의 데이터 범위를 담기 위해서는 돌 게임 5에서 사용한 BigInteger를 사용하면 해결할 수 있다. 돌은 한꺼번에 1개, 3개, 4개를 가져갈 수 있고 마자막에 가져가는 사람이 이긴다. 누가 이기는지 알기 위해서는 아래와 같이 게임 예상 표를 만들어 풀이해보면 규칙을 찾을 수 있다. 1개 상근 2개 창영 3개 상근 4개 상근 5개 상근 6개 상근 7개 창영 8~14개일 경우의 게임 예상표를 만들어도 위와 같은 결과를 만들어 낸다. 즉, ..
[JAVA] 백준 9659번 문제, 돌 게임 5 문제 링크 https://www.acmicpc.net/problem/9659 9659번: 돌 게임 5 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1,000,000,000,000) www.acmicpc.net 백준 사이트에는 돌 게임 시리즈가 있는데 지금 풀이할 돌 게임 5번은 데이터 범위만 확장시켜주면 쉽게 해결 할 수 있는 문제이다. import java.util.Scanner; import java.math.BigInteger; public class B9659 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); BigInteger n = sc.nextBigInteger(); if(n.remainder(new ..

728x90
반응형