분류 전체보기

    [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...

    [Java/자바 백준 1520] 내리막 길

    풀이 DFS + DP 문제입니다 처음에 DFS로만 풀었는데 메모리 초과가 발생했습니다. 이를 보완하기 위해 DP 메모이제이션 방법을 추가했습니다. 나보다 더 낮은 경로일 때 탐색을 계속해서 진행했으며, 목적지까지 도착하면 dp +1 시켜주었습니다. DFS방식이기 때문에 dp가 -1 이 아닌 경우는 이미 끝까지 탐색한 경로이기 때문에 해당하는 dp를 바로 return 시켜주었습니다. import java.io.*; import java.util.*; // dfs + dp 문제 public class Main{ static int N, M; static int[][] map; static int[][] dp; static int[] dx = {-1,0,1,0}; static int[] dy = {0,-1,0..

    [Java/자바 20055 백준] 컨베이어 벨트 위의 로봇

    [Java/자바 20055 백준] 컨베이어 벨트 위의 로봇

    설명 문제 자체가 어렵진 않지만, 조건이나 설명이 헷갈린 문제였습니다. 컨베이어 벨트이고, N 이후에는 낭떠러지라고 생각하면 됩니다. 순환하는 원형이고 1~N까진 로봇이 존재할 수 있지만, N+1~2N까지는 존재 X 풀이 순서대로 진행하면 1. 과정에서 벨트와 로봇이 움직이게되는데, 이때 내리는 위치에 도달한 로봇은 즉시 내려갑니다. moveBelt() 2. 로봇이 앞에 칸에 내구도가 1이상이며, 로봇이 존재하지 않는다면 앞으로 이동하게 됩니다. 앞에 칸의 내구도는 -1. moveRobot() 3. 올리는 위치에 내구도가 1이상이면 로봇을 올려주고, 내구도를 -1 시켜줍니다. newRobot() 2,3번 과정에서 내구도가 -1되는 칸마다 0이 된 칸을 확인해주었습니다. import java.io.*; i..

    [Java/자바 백준 19238] 스타트 택시

    풀이 bfs를 이용하면서 collection sort 가 핵심인 문제 출발지와 도착지를 찾으면서 마지막에 남는 연료 값 출력하는 문제였으며, 승객 출발지 위치에 도달할 수 없거나, 승객을 태우고 도착지로 도달할 수 없는 경우 -1 출력, 또한 중간에 연료를 다 소진하게 되면 -1 출력해야합니다. 승객들을 찾는 과정에서 Taxi 클래스에서 time,row,col 순으로 collection sort를 해주고 조건에 맞는 승객을 태워 걸린 시간과 passengerMap에서 인덱스를 구해주고 Passenger 인덱스에 해당하는 도착지에 걸린시간을 도달하는 시간을 계산. package b0103; import java.io.*; import java.util.*; public class Main_bj_g4_192..

    [Java/자바 백준 2589] 보물섬

    풀이 bfs로 해결 가능한 문제 'L' 육지인 상황마다 가장 먼 육지와의 거리를 계산해주는 문제입니다. visited 를 -1로 모두 초기화해서 현재 위치와 가장 먼 육지를 계산하고 bfs가 진행될 때마다 현재 가장 먼 거리를 가지고 있는 answer와 비교 import java.io.*; import java.util.*; public class Main { static int N, M, answer; static char[][] map; static Queue queue = new LinkedList(); static int[] dx = {-1,0,1,0}; static int[] dy = {0,1,0,-1}; public static void main(String[] args) throws Exce..

    [Java/자바 백준 14503] 로봇 청소기

    풀이 문제 그대로 하나하나씩 진행하면 되는 문제였습니다. 현재 x,y 좌표와 바라보는 방향을 저장하고 왼쪽부터 청소할 수 있는지 비교해보며, 만약 청소할 수 없는 공간이 없다면 바라보는 방향 기준으로 후진을 진행했습니다. import java.io.*; import java.util.*; public class Main_bj_g5_14503_로봇청소기 { static int N, M, curX, curY, curDir, totalClean, dirCheck; static int[][] map; static boolean[][] visited; // 북 동 남 서 static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, 1, 0, -1}; public static ..