테트로미노(백준_14500)
·
BackEnd/알고리즘 공부
https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 문제 설명 입력 첫째 줄에 종이의 세로 크기 N과 가로 크기 M이 주어진다. (4 ≤ N, M ≤ 500) 둘째 줄부터 N개의 줄에 종이에 쓰여 있는 수가 주어진다. i번째 줄의 j번째 수는 위에서부터 i번째 칸, 왼쪽에서부터 j번째 칸에 쓰여 있는 수이다. 입력으로 주어지는 수는 1,000을 넘지 않는 자연수이다. 시간제한은 2초이므로 2억 번 연산이 가능하다고 생각하자. 전체 최대 수가 500..
절댓값 힙(백준_11286번)
·
BackEnd/알고리즘 공부
https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 문제 설명 이 문제는 숫자가 입력 되면 2가지 조건으로 정렬을 하면 된다. 배열에 정수 x (x ≠ 0)를 넣는다. 배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다 문제에 대한 아이디어 이 문제는 우선순위 큐를 사용해 해결 하라는 문제이다. 자바에서 우선순위..
좋다(백준 1253번)
·
BackEnd/알고리즘 공부
https://www.acmicpc.net/problem/1253 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 문제 설명 N개의 숫자가 정해지면 각 숫자가 나머지 숫자의 합으로 나타낼 수 있는지 검사하는 것이다. 1 2 3 4 5 6 7 8 9 10이 있으면 3은 1과 2를 더함으로 써 나타낼 수 있으므로 좋은 수이다. 자료구조를 사용해 풀기 문제에 대한 아이디어 제일 처음 이 문제를 봤을 때, 푼 방법이다. 사용할 자료구조는 배열과 HashMap이다. 총 2가지 단계가 존재한다. 첫번째 단계에는 배열은 수열을 입력받고 HashMap..
최솟값 찾기(백준 11003번)
·
BackEnd/알고리즘 공부
https://www.acmicpc.net/problem/11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net 문제 설명 N개의 수와 L이 주어질 때, Ai-L+1 ~ Ai수중에서 최소값을 찾는 문제이다. N = 12, L = 3 일때, 1 5 2 3 6 2 3 7 3 5 2 6 주어 지면 제일 처음은 1이므로 1 그다음 은 1, 5 중에 1 그 다음은 1, 5, 2 중에 1 그다음은 5,2,3 중에 최소값 2가 출력이 된다. 알고리즘 설명 특정한 범위에서 최소값이나 최대값..
투 포인터(JAVA)
·
BackEnd/알고리즘 공부
수들의 합5(백준 2018번) https://www.acmicpc.net/problem/2018 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한 www.acmicpc.net 문제 설명 이 문제는 입력값 N을 몇 개의 연속된 자연수의 합으로 나타낼 수 있는지 구하는 것이다. 예를 들어 15를 입력 받으면 7+8, 4+5+6, 1+2+3+4+5, 15 이렇게 4가지 이다. 문제에 대한 아이디어 투 포인터를 이용해서 풀어 나가는 대표적인 문제이다. start_idx 와 end_idx가 둘 다 처음 1에서 부터 시작한다. ..
구간 합 구하기(JAVA)
·
BackEnd/알고리즘 공부
구간 합 구하기는 원하는 구간의 합을 구하기 위해 미리 구간들의 합을 계산해 배열 상태로 저장해 놓는 것이다. 구간 합 구하기 예제 1(11659번) https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 이 문제는 수의 개수 N과 퀴리의 개수 M이 주어지고 배열의 숫자가 주어지면 구간합을 구하는 문제이다. import java.io.BufferedReader; import java.io.IOException; import ja..