알고리즘/구현13 [백준] 14719번: 빗물 - java 1. 왼쪽 -> 오른쪽으로 벽의 최대 높이를 저장한다. 이때 비교하는 벽의 기준의 height(지금까지 중 가장 높은 블럭) 이다. 2. 오른쪽 -> 왼쪽으로 벽의 최대 높이를 저장한다. 1 과 2 에서 저장된 높이 중 더 작은 높이를 벽의 높이로 저장하며, 빗물이 고인 양을 구하기 위해 [ 블록 높이 - 벽높이 ] 로 계산한다. 나의코드 import java.io.*; import java.util.StringTokenizer; public class Main { static int h, w, height, answer, blocks[], rain[]; public static void main(String[] args) throws IOException { BufferedReader br = new .. 알고리즘/구현 2023. 7. 7. [백준] 2933번 : 미네랄 - java 전체적인 단계 구상은 다음과 같다. 1. 주어진 높이와 방향에서 (왼->오 or 오->왼) 미네랄 파괴 2. 파괴 후, 공중에 떠 있는 클러스트가 있는지 확인 (BFS 탐색으로 클러스트에서 가장 아래에 있는 미네랄이 바닥이 아니라면, 떠 있는 것으로 간주) 3. 공중에 떠 있는 클러스트라면, 맨 아래 부분 중 하나가 바닥 또는 미네랄 위로 떨어지도록 이동시키기 // 단, 떨어지는 동안 클러스터의 모양은 변하지 않는다. => 클러스트에 포함된 미네랄은 모두 같은 높이로 떨어진다. // 두 개 또는 그 이상의 클러스터가 동시에 떨어지는 경우는 없다. => 공중에 떠 있는 1개의 클러스터를 발견하면, 더 이상의 클러스트 탐색은 할 필요가 없다. 1) x -> . 로 변경 2) 공중에 떠 있는 클러스트 확인 (.. 알고리즘/구현 2023. 4. 3. [swea] 2383번: 점심 식사시간 - java 문제 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5-BEE6AK0DFAVl SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 나의 코드 import java.awt.Point; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayDeque; im.. 알고리즘/구현 2023. 3. 6. [백준] 17143번: 낚시왕 - java 나의 풀이 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Main { static class Shark { int speed; int dir; i.. 알고리즘/구현 2023. 3. 2. [백준] 19237번: 어른 상어 - 파이썬(python) 나의 풀이 import copy import sys input = sys.stdin.readline n, m, k = map(int, input().split()) arr = [list(map(int, input().split())) for _ in range(n)] # 격자판 smell = [[[0, 0] for _ in range(n)] for _ in range(n)] shark_dir = [0] + list(map(int, input().split())) # 현재 상어 방향 dir_rank = [[]] # 상어의 방향별 우선순위 dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] for i in range(m): array = [] for j in range(4): array.ap.. 알고리즘/구현 2022. 10. 25. [프로그래머스] 괄호 변한 - 파이썬(python) 문제 설명 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스 코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다. 수정해야 할 소스 파일이 너무 많아서 고민하던 "콘"은 소스 코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는 프로그램을 다음과 같이 개발하려고 합니다. 용어의 정의 '(' 와 ')' 로만 이루어진 문자열이 있을 경우, '(' 의 개수와 ')' 의 개수가 같다면 이를 균형잡힌 괄호 문자열이라고 부릅니다. 그리고 여기에 '('와 ')'의 괄호의 짝.. 알고리즘/구현 2022. 10. 7. [프로그래머스] 외벽 점검 - 파이썬(python) 문제 설명 레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하는 도중에 주기적으로 외벽의 상태를 점검해야 할 필요가 있습니다. 레스토랑의 구조는 완전히 동그란 모양이고 외벽의 총 둘레는 n미터이며, 외벽의 몇몇 지점은 추위가 심할 경우 손상될 수도 있는 취약한 지점들이 있습니다. 따라서 내부 공사 도중에도 외벽의 취약 지점들이 손상되지 않았는 지, 주기적으로 친구들을 보내서 점검을 하기로 했습니다. 다만, 빠른 공사 진행을 위해 점검 시간을 1시간으로 제한했습니다. 친구들이 1시간 동안 이동할 수 있는 거리는 제각각이기 때문에, 최소한의 친구들을 투입해 취약 지점을 점검하고.. 알고리즘/구현 2022. 10. 5. [백준] 3190번: 뱀 - 파이썬(python) 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다. 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다. 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는.. 알고리즘/구현 2022. 10. 4. [백준] 15686번: 치킨 배달 - 파이썬(python) 문제 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 집을 기준으로 정해지며, 각각의 집은 치킨 거리를 가지고 있다. 도시의 치킨 거리는 모든 집의 치킨 거리의 합이다. 임의의 두 칸 (r1, c1)과 (r2, c2) 사이의 거리는 |r1-r2| + |c1-c2|로 구한다. 예를 들어, 아래와 같은 지.. 알고리즘/구현 2022. 10. 3. [프로그래머스] 기둥과 보 설치 - 파이썬(python) 문제 설명 빙하가 깨지면서 스노우타운에 떠내려 온 "죠르디"는 인생 2막을 위해 주택 건축사업에 뛰어들기로 결심하였습니다. "죠르디"는 기둥과 보를 이용하여 벽면 구조물을 자동으로 세우는 로봇을 개발할 계획인데, 그에 앞서 로봇의 동작을 시뮬레이션 할 수 있는 프로그램을 만들고 있습니다. 프로그램은 2차원 가상 벽면에 기둥과 보를 이용한 구조물을 설치할 수 있는데, 기둥과 보는 길이가 1인 선분으로 표현되며 다음과 같은 규칙을 가지고 있습니다. 기둥은 바닥 위에 있거나 보의 한쪽 끝 부분 위에 있거나, 또는 다른 기둥 위에 있어야 합니다. 보는 한쪽 끝 부분이 기둥 위에 있거나, 또는 양쪽 끝 부분이 다른 보와 동시에 연결되어 있어야 합니다. 단, 바닥은 벽면의 맨 아래 지면을 말합니다. 2차원 벽면은 .. 알고리즘/구현 2022. 10. 2. [프로그래머스] 자물쇠와 열쇠 - 파이썬(python) 문제 설명 고고학자인 "튜브"는 고대 유적지에서 보물과 유적이 가득할 것으로 추정되는 비밀의 문을 발견하였습니다. 그런데 문을 열려고 살펴보니 특이한 형태의 자물쇠로 잠겨 있었고 문 앞에는 특이한 형태의 열쇠와 함께 자물쇠를 푸는 방법에 대해 다음과 같이 설명해 주는 종이가 발견되었습니다. 잠겨있는 자물쇠는 격자 한 칸의 크기가 1 x 1인 N x N 크기의 정사각 격자 형태이고 특이한 모양의 열쇠는 M x M 크기인 정사각 격자 형태로 되어 있습니다. 자물쇠에는 홈이 파여 있고 열쇠 또한 홈과 돌기 부분이 있습니다. 열쇠는 회전과 이동이 가능하며 열쇠의 돌기 부분을 자물쇠의 홈 부분에 딱 맞게 채우면 자물쇠가 열리게 되는 구조입니다. 자물쇠 영역을 벗어난 부분에 있는 열쇠의 홈과 돌기는 자물쇠를 여는 .. 알고리즘/구현 2022. 10. 2. [프로그래머스] 문자열 압축 - 파이썬(python) 문제 설명 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, "abcabcdede"와 같은 문자열은 전혀 압축되지 않습니다. "어피치"는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘.. 알고리즘/구현 2022. 10. 1. 이전 1 2 다음