[백준][Java] 21921번 : 블로그
·
PS/백준
[문제 링크]https://www.acmicpc.net/problem/21921문제 설명블로그를 시작한 지 N일이 지났을 때, X일 동안 가장 많이 들어온 방문자 수와 그 기간의 개수를 구해서 출력한다.최대 방문자 수가 0명이면 SAD 출력 문제 풀이슬라이딩 윈도우 알고리즘을 활용한 문제첫 번째 X일 동안의 방문자수(1일차~X일차) 합을 먼저 구한다.for문으로 한 칸씩 이동하면서 맨 앞의 값은 빼고 새로운 값을 더해서 구간의 합을 계산한다. 전체 코드import java.io.*;import java.util.StringTokenizer;public class Main { public static void main(String[] args) throws IOException { ..
[백준][Java] 14719번 : 빗물
·
PS/백준
[문제 링크]https://www.acmicpc.net/problem/14719문제 설명테두리 있는 글상자 문제 풀이구현 문제for문을 돌면서 현재 블록 기준으로 오른쪽에서 최대 높이의 블록, 왼쪽에서 최대 높이의 블록을 각각 구한다.→ maxLeft, maxRightmaxLeft와 maxRight 중 더 작은 값 m을 구한다.m이 현재 블록의 높이보다 높을 경우 빗물이 고인다.→ m - (현재 블록의 높이) 가 현재 블록에 쌓이는 빗물의 양이 된다.여기서, 가장 왼쪽 블록과 가장 오른쪽 블록에는 물이 고일 수 없다.따라서 for문의 범위는 1 부터 w-1예제2를 그림으로 그려보면 아래와 같다. 전체코드import java.io.*;import java.util.Arrays;import ja..
[백준][Java] 1926번 : 그림
·
PS/백준
[문제 링크]https://www.acmicpc.net/problem/1926문제 설명n × m 크기의 도화지에 있는 그림의 개수와 그림의 넓이가 가장 큰 것을 구한다.0은 색칠이 안된 부분, 1은 색칠이 된 부분이고, 1로 연결된 것을 그림 이라고 한다. 문제 풀이(1) DFS 사용import java.io.*;import java.util.StringTokenizer;public class Main { static int[][] array; static int n, m; static int area = 0, cnt = 0, maxArea = 0; static boolean[][] visited; static int[] dx = {-1, 1, 0, 0}; sta..
[백준][Java] 20437번 : 문자열 게임 2
·
PS/백준
[문제 링크]https://www.acmicpc.net/problem/20437문제 설명알파벳 소문자로 이루어진 문자열 w와 양의 정수 k가 주어질 때, 아래 두 개에 해당되는 문자열의 길이를 구한다.- 어떤 문자를 정확히 k개 포함하는 가장 짧은 문자열의 길이- 어떤 문자를 정확히 k개 포함하고, 문자열의 첫 번째와 마지막 글자가 해당 문자로 같은 가장 긴 문자열의 길이 만족하는 문자열이 없을 경우 -1 출력 문제 풀이반복문을 사용해서 어떤 문자 k개를 포함하는 가장 짧은 문자열과 가장 긴 문자열의 길이를 구한다.처음에는 모든 경우의 수를 탐색하도록 구현했더니 시간초과가 떴다.그래서 아래와 같이 알파벳별로 개수를 세서 탐색을 실행하는 조건을 추가했다.추가한 부분1. 입력받은 문자열 w에서 각 ..
[백준][Java] 18428번 : 감시 피하기
·
PS/백준
[문제 링크]https://www.acmicpc.net/problem/18428문제 설명T-선생님, S-학생, O-장애물, X-아무것도 존재하지 않음복도에 학생들이 선생님의 감시에 들키지 않도록 장애물을 설치한다.- 선생님은 본인의 위치에서 상하좌우로 감시 가능- 선생님과 학생 사이에 장애물이 있으면 학생을 볼 수 없음3개의 장애물을 설치해서 모든 학생이 선생님의 감시로부터 피할 수 있는지를 구한다. 모두 피할 수 있으면 YES, 그렇지 않으면 NO 문제 풀이복도의 정보를 입력받으면서 T(선생님)의 위치 정보를 teachers 리스트에 따로 저장한다.dfs 탐색으로 장애물 3개를 세우는 모든 경우의 수를 구한다.벽이 3개가가 된 경우, bfs 탐색으로 현재 상태에서 모든 학생이 감시를 피할 수..
[백준][Java] 17276번 : 배열돌리기
·
PS/백준
[문제 링크]https://www.acmicpc.net/problem/17276문제 설명배열 X를 45도 배수만큼 시계방향 or 반시계방향으로 돌린다.시계방향으로 45도를 돌리면 아래와 같은 연산을 적용한다.1. 주대각선(왼쪽 대각선) → 가운데 열2. 가운데 열 → 부대각선(오른쪽 대각선)3. 부대각선(오른쪽 대각선) → 가운데 행5. 가운데 행 → 주대각선(왼쪽 대각선)6. 다른 원소의 위치는 변하지 않는다.반시계방향은 위 연산을 반대 방향으로 적용입력받은 회전 각도만큼 배열을 돌렸을 때, 배열을 출력한다. 문제 풀이배열을 시계방향, 반시계방향으로 돌리는 연산 규칙은 아래와 같다.시계방향으로 45도주대각선(왼쪽 대각선) → 가운데 열가운데 열 → 부대각선(오른쪽 대각선)부대각선(오른쪽 ..