알고리즘

    [Java/자바 백준 19237] 어른 상어

    풀이 담아야할 변수가 많기 때문에 따로 관리하는게 덜 헷갈리거라 생각했습니다. 사용 변수 - map : 상어 인덱스를 2차원 배열에 표현해서 실시간 위치 파악 - visited : 상어가 방문하여 해당 위치에 냄새가 있는지 파악하기 위해, 상어 인덱스와 냄새가 얼마나 남았는지 표시해주었습니다. - priorityDir : 상어별로 우선순위 방향을 담았습니다. - sharks : 상어의 x, y, dir(방향)을 담았습니다. while문에서 시간이 1000이 초과될때까지 - makeDir() : 우선순위에 따라 방향 이동 - deleteVisit() : visited에 해당 냄새 -1씩 감소 - moveMap() : 1번 상어부터 sharks에 x, y 값을 map 옮겨주고, 이미 map에 상어가 위치한다..

    [Java/자바 백준 2234] 성곽

    풀이 벽에 대한 숫자를 이진법으로 바꾸게 되면, 1인 곳의 방향은 벽이고 0인 곳은 연결된 공간입니다. bfs로 연결된 곳을 모두 탐색하여 map에 룸의 인덱스 값을 넣어주고, bfs 돌때마다 사이즈를 1씩 더해주어 최대 방 사이즈를 구해줍니다. 벽을 하나 부수어 두개의 방을 합친 최대값은, 해쉬맵을 사용해서 각 방의 크기를 넣어주고 이중 포문을 돌려 사방 탐색을 할 시에 다른 룸의 인덱스 값이 있을 때, 현재 룸 크기와 다른 룸 크기를 더해주며 max 값을 비교해주었습니다. import java.io.*; import java.util.*; public class Main { static int N,M; static int[][] map; static int[][] wallMap; static int ..

    [Java/자바 백준 2174] 로봇 시물레이션

    풀이 엄청난 도전을 한 문제... 풀이 과정은 어렵지 않지만 헷갈리면 엄청 헷갈린 문제 헷갈린 문제 포인트 1. x축, y축이 일반적인 x,y값이 아닌 수학 문제 풀때 1사분면? 처럼 위치를 나타낸다 문제 수정하고 계속 틀려서 왤까 하다가 경계값을 반대로 안했었다... 헷갈린 문제 포인트 2. 백준에는 테스트 케이스가 하나만 주어져서 L, R일때 왼쪽 오른쪽으로 90도 방향으로만 도는 줄 알았다... https://nordic.icpc.io/ncpc2005/ 문제 낸 사이트 들어갔더니 테케가 5개 정도 주어지고 L방향으로 96번 회전하는 테케도 있어서 이거때문에 엄청 오래걸렸따... 나머지 구현은 어렵지 않으므로 코드를 통해 확인하면 됩니다. import java.io.*; import java.util..

    [Java/자바 백준 13901] 로봇

    풀이 문제 대로 구현하면 되는 문제지만, 푸는데 꽤 오래 걸렸습니다. 원인은 방향 인덱스 bfs로 풀고, 방향 인덱스를 잘 못 갱신해줬었습니다 ! 풀이는 로봇 위치와 장애물 위치, 방향을 입력 받고, 맵 밖에 나가거나, 방문한 위치를 방문하거나, 장애물을 만나면 방향을 바꾸면 바꿔 다른 방향으로 탐색하는 식으로 풀었습니다. import java.io.*; import java.util.*; public class Main{ static int K, R, C, curX, curY, dirIdx; static int[][] map; static boolean[][] visited; static int[] dir = new int[4]; //상 하 좌 우 static int[] dx = {-1,1,0,0}; ..

    [Java/자바 백준 11559] PuyoPuyo

    풀이 어릴 때 했던 뿌요뿌요 게임이네요 ~~ 우선 방문하지 않았고, '.'이 아닌 상태였으면 bfs를 진행했습니다. bfs 중에 인접한 글자들의 갯수를 세어 deleteQueue(없애줄 x,y좌표)와 함께 넣어주고 4개 이상이면 deleteQueue에 있는 좌표들을 빼주어서 .으로 바꾸었습니다. 다음 중력을 작용시키기위해 삼중 for문으로 글자들을 밑으로 보내주었습니다. 비교적 쉬운문제 ! import java.io.*; import java.util.*; public class Main{ static char[][] map = new char[12][6]; static boolean[][] visited; static Queue queue = new LinkedList(); static Queue de..

    [Java/자바 백준 1062] 가르침

    풀이 문제 해석이 어려웠던 문제. 알파벳 K개를 가르칠 때 N개 단어 중 최대로 읽을 수 있는 개수를 정해주는 문제 "anta"로 시작해서 "tica"로 끝나기 때문에 a,n,t,i,c 5개 알파벳은 꼭 있어야 하므로 K는 5개 이상 이어야합니다. 그 다음 조합으로 풀고, 이중 for문을 통해 단어를 읽을 수 있으면 +1 시켜주어서 max값으 비교했습니다. import java.io.*; import java.util.*; public class Main{ static int N, K, max; static boolean[] isSelected = new boolean[26]; static String[] strArr; public static void main(String[] args) throws E..

    [Java/자바 백준 21609] 상어 중학교

    [Java/자바 백준 21609] 상어 중학교

    풀이 이틀정도 본 문제입니다. 테케가 다 돌아가는데 안돼서 뭘까 했는데 원인은 기준 블록이 가장 큰 행,열인 줄 알았는데, 기준 블록은 행, 열이 작은 것으로 잡아줘야합니다. 블록 크기가 가장 큰 그룹이 두개 이상이라면 기준 블록 중 무지개 블록이 많은 순, 행이 큰 순, 열이 큰 순으로 뽑아야합니다.. 1번 bfs로 찾았습니다. comparable을 활용하여 블록 개수, 무지개 블록 갯수, 행, 열 순으로 정렬시켜주었습니다. 2번 같은 bfs를 구현하여 visited에 true로 표시하고 true인 값들을 모두 -2로 바꾸어주었습니다. 3번 gravity() 함수를 구현하였고 -1은 움직이지 않았습니다. 4번 삼성 문제는 회전시키기가 자주 나오는 것 같습니다. https://velog.io/@domyb..

    [Java/자바 백준 20057] 마법사 상어와 토네이도

    [Java/자바 백준 20057] 마법사 상어와 토네이도

    풀이 2가지 구현이 핵심이었던 문제 1. 토네이도 루트 구현 -> 규칙이 있어서 나름 쉬움 2. 흩날리는 모래 구현 -> 꽤 까다로움 그림과 같이 소수점으로 떨어지게 되면 버림으로 해서 각각 계산해주어, 1 이상이면 map += 더해주고, 흩날리지 않은 나머지들을 모두 알파에 넣어줘야한다. (처음 퍼센트를 다 계산하니까 나머지가 55여서 55로 계산했다가 시간을 날렸다.) 그 과정에서 서 남 동 북 순서대로 3차원 배열을 사용해서 위치를 하나하나씩 구해주었다. 함수가 진행하면서 map 밖으로 나가면 answer에 더해주고 출력 ! package b0108; import java.io.*; import java.util.*; public class Main_bj_g4_20057_마법사상어와토네이도 { st..

    [Java/자바 프로그래머스] 오픈 채팅방

    풀이 Map은 아이디와 닉네임을 관리해주고, Queue는 채팅방 메세지를 관리했습니다. 닉네임이 바뀔 때 map에 아이디인 키로 접근하여서 닉네임인 value값을 변경해주었습니다. Leave 와 Change 상황에는 조건을 주어서 풀이를 완료했습니다. ! import java.io.*; import java.util.*; class Solution { static Map map; static Queue result; public String[] solution(String[] record) { map = new HashMap(); result = new LinkedList(); String[] answer = {}; StringTokenizer st; for(int i = 0 ; i < record.le..

    [Java/자바 20056 백준] 마법사 상어와 파이어볼

    풀이 문제 해석은 딱히 필요없고 주어진 대로 구현하면 됩니다. K번 돌고나서 불의 질량 합을 구하면 되는 문제입니다. 저는 map을 큐로 표현해서 fire 형태로 담아 여러개 불이 존재할 수 있는 상황을 해결했습니다. 1. fireMove() 에서 불을 이동시켜주었습니다. 불의 범위가 map을 벗어나는 것을 판별해주려고 isAvailiable을 만들었습니다. %를 사용하면 더 편할거같은데 음수값일때 복잡해져서 일단은 for문 돌때마다 비교를 했습니다. 2. 다음 map에 2개 이상의 불이 존재할 경우 fireDivide()에서 나누는 작업을 했습니다. 모든 질량, 속력 값을 구해줘서 조건에 따라 질량이 0이될 경우와 모든 수가 홀수 or 짝수일 때를 판별해주었습니다. https://www.acmicpc...