본문 바로가기

[Algorithms]/[Problems]

(32)
BOJ. 19237번. 어른상어 이번 문제는 특별한 알고리즘 개념 없이 단순한 구현 문제였는데 두시간이 넘게 걸렸다. 1. 각 상어의 위치와 상태(방향 등) 값을 따로 저장하고, 상어 구분을 위한 배열, 구분된 상어의 냄새를 위한 배열 두가지를 사용한다. 2. 시간의 흐름에 따라 상어를 움직이는데, 우선순위를 유의해서 상어의 옮길 위치를 업데이트 한다. 3. 옮기기 전에 기존의 냄새를 1씩 날리고, 옮긴 위치의 냄새는 처음 냄새 값인 k를 넣는다. 4. 실수에 유의한다. 차분하게 푸는 습관이 필요하다고 느꼈다. 꼭 채워넣고 싶은 점은 다음 두가지였다. 1. 구현문제에서 항상 그렇듯, 시간이 지날때 마다 지우고 빼는 등, 시점에 따른 컨트롤이 아직 미숙하다. 2. 로직은 항상 괜찮게 짜는 듯 한데, 잔실수가 많다. (Expert 프로님께..
BOJ. 16236번. 아기상어 이번엔 아기상어 문제다. 조건에서 '가까운 물고기를 먹는다'는 조건이 꽤나 까다로웠다. 먹을 수 있는 물고기들의 좌표를 모아서 sorting하는 간단한 방법이 있는데, 방향의 우선순위를 정해서 DFS적인 느낌으로 하려다 보니 풀이에 애를 먹었다. 그 외에 구현은 그렇게 어렵지 않다. 1. 먹을 수 있는 물고기를 찾는다. - 상어가 다음 위치로 갈 수 있는 경우라면, 움직일 때마다 거리를 나타내는 배열에 값을 1씩 추가한다. - 만약에 움직인 위치가 0이 아니고, 먹을 수 있는 고기라면, 고기 후보군에 넣어준다. - 만약 마지막 후보군의 위치보다 거리배열의 위치가 크면, 더이상 진행하지 않는다. 2. 고기 후보군을 Sorting한다. 3. 가서 잡아먹고, 거리만큼 시간에 더해준다. -> 상어 위(잡아먹은 ..
BOJ. 20058번. 마법사 상어와 파이어스톰 상어가 점점 그 실체를 드러내고 있다;; 상어 시리즈는 대게 구현과 시뮬레이션을 주제로 다루고 있고, 이번 문제 역시 배열을 구획을 나눠 회전시키는 방법과 간단한 BFS을 이용하는 문제이다. (한마디로 한 문제에 여러 개념을 때려박은 느낌;;;) 구현은 간단하다. 1. 회전하는 함수를 구성하고 2. 얼음을 녹이고 3. 가장 큰 덩어리는 그냥 bfs로 찾는다. 이런문제 너무 싫... www.acmicpc.net/problem/20058 20058번: 마법사 상어와 파이어스톰 마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c www.acmicpc.net packa..
BOJ. 20057번. 마법사 상어와 토네이도 두 단계로 나누어서 생각하면 간단하다. 1. 먼저 토네이도를 그린다. 2. 각각의 토네이도 좌표에서 주어진 조건처리를 한다 시간을 정해놓고 풀다보니 코드가 깔끔하지 못하다. 짧은 시간안에 정돈된 코드를 짜는 연습을 더 해야겠다. www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream..
BOJ. 20056번. 마법사 상어와 파이어볼 이번주는 상어문제들을 종합적으로 풀어보기로 했다. 구현문제들은 주로 조건에 따라 코드만 세심하게 살펴 짜면 통과받는데는 크게 어려움이 없다. ( 코드가 이쁘지 않은것이 함정;; ) www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.uti..
BOJ. 6593번. 상범빌딩 이제 DFS,BFS에 대한 간단한 문제들은 자리를 잡은 느낌이다. 이번 문제도 간단한 BFS문제였고, 2차원 배열에서 돌아가는 일반 문제와 달리 3차원 공간이라 재미있었다. 하지만 결국은 축이 하나 더 들어간 노가다;; 그리고 출력하는 문자가 틀릴 경우 바로 틀렸다고 안뜨고, 33%쯤에서 뜬다;;; 조심하자! www.acmicpc.net/problem/6593 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net package week5; import java.io.BufferedReader; import java.io..
BOJ. 17406번. 배열 돌리기 4 이전과 달라진 점은, 순열에 대한 부분과, 회전를 시키는 위치를 지정하게끔 변경된 것이다. 따라서 순열의 경우의 수를 구하고, 각 경우마다 회전 연산을 수행하여, 각 연산에 따른 결과를 갱신하는 방법으로 문제를 해결했다. www.acmicpc.net/problem/17406 17406번: 배열 돌리기 4 크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의 www.acmicpc.net import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; ..
BOJ. 16935번. 배열 돌리기 3 문제에서 원하는 회전에 대한, 각각의 연산을 수행해 주면 된다. www.acmicpc.net/problem/16935 16935번: 배열 돌리기 3 크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 → www.acmicpc.net import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamW..
BOJ. 16927번. 배열 돌리기 2 1번에 비해 달라진 점은, 일정 횟수 이상 회전이 반복되면 처음과 동일해지므로, 그에 대한 처리를 해주면 된다. www.acmicpc.net/problem/16927 16927번: 배열 돌리기 2 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStrea..
BOJ. 16926번. 배열 돌리기 1 배열돌리기 문제를 1~4까지 풀어보았다. 당연히 붙은 번호가 높아질수록 난이도도 다소 올라간다. 배열 조작에 익숙해지는 재미가 있었다. www.acmicpc.net/problem/16926 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java...