코딩테스트 57

[BOJ_1074/JAVA] Z

https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 문제 풀이 구현문제이고, 처음에 접근할 때는 2차원배열을 만들어서 하나씩 값을 증가시키면서 배열에 넣으려고 했다. 하지만 이런식으로 접근하면 N이 1

코딩테스트 2022.04.19

[BOJ_7576/JAVA] 토마토

https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 문제 풀이 해당 문제는 익은 토마토부터 인접한 토마토로 이동하면서 +1 을 해주어야하기 때문에 BFS를 사용해야한다. 1. for문을 돌면서 map[][] 창고에 값을 넣는다. 2. 토마토의 값을 다 넣은 후, for문을 돌면서 익은토마토(1)인 것을 찾고 큐에 넣는다. 3. 익은 토마토를 큐에 다 넣은 후 하나씩 큐에서 제거하면서 탐색을 시작한다. 4. 상하좌우로 탐색을 하다가 ..

코딩테스트 2022.04.17

[Programmers/JAVA] 거리두기 확인하기

https://programmers.co.kr/learn/courses/30/lessons/81302?language=java 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr 풀이 해당 문제는 응시자가 앉아있는 위치에서 가까운 곳부터 탐색해..

코딩테스트 2022.04.16

[BOJ_2565/JAVA] 전깃줄

https://www.acmicpc.net/problem/2565 2565번: 전깃줄 첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 www.acmicpc.net 문제 풀이 해당 문제는 교차되는 전깃줄을 세보려고했으나 그렇게 푸는 것보다 전체 이을 수 있는 전깃줄 - 최대로 이을 수 있는 전깃줄 = 교차되는 전깃줄을 이용하면 된다. 전체 이을 수 있는 전깃줄의 경우의 수는 n이고, 최대로 이을 수 있는 전깃줄은 LIS 알고리즘을 이용하면 된다. LIS 알고리즘이란? 최장 증가 부분 수열 알고리즘으로 원소가 n개인 배열의 일부 원소를 골라내서 만든 부분 수열 중, ..

코딩테스트 2022.04.12

[BOJ_14888/JAVA] 연산자 끼워 넣기

문제 풀이 처음에는 DFS로 풀어야하는지모르고 큰수일땐 *다음에...+다음에...-다음에... 작을수일땐 /다음에...-다음에.....주저리주저리 구현으로 풀려고했다. 하지만 다른사람 코드를 보니 DFS로 푸니 코드가 훨씬 짧아진것을 볼 수 있었다... DFS로 풀겠다는 아이디어를 얻기위해서 아직 갈길이 멀다.. index(수열의 개수)가 점점 늘어가다가 수열이 n이 되었을때 최솟값과 최댓값을 계속해서 구해나가는 식으로 풀었다. 그리고 자바에서는 Integer 클래스를 사용하면 정수의 최댓값, 최솟값 필드를 사용하 수 있다. Integer.MAX_VALUE; Integer.MIN_VALUE; 코드 package Week11; import java.io.BufferedReader; import java.i..

코딩테스트 2022.02.11

[BOJ_18405/JAVA] 경쟁적 전염

문제 풀이 해당 문제는 가장 인접한 위치부터 이동해야하기때문에 BFS를 사용한다. 1. 2차원 배열인 map을 돌면서 map[i][j]가 1일 때 위치를 큐에 집어넣는다. 2. 큐가 빌 때까지 항목을 하나씩 빼면서 가장 인접한 위치로 이동한다. 3. 이동할 때 0이고 전염이 되지 않았을 경우 전염을 시킨다. 4. 1 인접한 위치를 전염시켰으니 그 다음 map[i][j]가 2일 때 위치를 큐에 집어넣는다. 5. 2-3번 과정을 반복한다. 6. 3도 마찬가지로 1-3번 과정을 반복한다. 7. 위의 과정을 S초가 될때까지 카운트하면서 반복한다. 그런데,, 나는 아싸 나도 이제 BFS 좀 할줄아나 ~? 하면서 채점했는데 시간초과... 개짜증나네 ㅎ 언제까지 나를 좌절시킬건지 암튼 bfs를 반복할 때 x,y 위치..

코딩테스트 2022.02.07

[Programmers/JAVA] 모의고사

문제 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주..

코딩테스트 2022.02.01

[Programmers/JAVA] 자물쇠와 열쇠

풀이 1. 한칸이동한다. 2. key를 회전시킨다. 3. key와 Lock을 더해서 1이면 true 반환! 도저히 나혼자서 못풀겠어서 유튜브강의를 보았다. 여전히 모르겠어서 블로그에 차근차근 정리해보려고 한다. 우선, 1. 한칸 이동한다 한칸 이동할 때 자물쇠의 맨 왼쪽에 키를 두고 옮겨야한다. 옮기면서 lock과 key가 겹칠 수 있는 모든 경우를 살펴봐야한다. 위와 같이 자물쇠의 맨왼쪽부터 맨오른쪽끝까지 이동하면서 비교한다. 그렇다면 열쇠의 총 이동거리는 가로방향으로 5(자물쇠의 가로크기+key의 맨오른쪽 좌표)이동하고, 세로방향으로 5(자물쇠의 세로크기+key의 맨왼쪽 좌표) 이동한다. 2. key를 회전시킨다. 한칸을 이동했을 때 자물쇠와 열쇠가 맞지않으면 회전을 해야한다. 회전은 시계방향으로 9..

코딩테스트 2022.02.01

[Programmers/JAVA] 문자열 압축

문제 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, "abcabcdede"와 같은 문자열은 전혀 압축되지 않습니다. "어피치"는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘라서 ..

코딩테스트 2022.01.30

[이코테/JAVA] Greedy - 만들 수 없는금액

문제 동네 편의점 주인인 동빈이는 N개의 동전을 가지고 있습니다. 이때 N개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요. 예를 들어, N=5이고, 각 동전이 각각 3원, 2원, 1원, 1원, 9원짜리(화폐 단위) 동전이라고 가정합시다. 이때 동빈이가 만들 수 없는 양의 정수 금액 중 최솟값은 8원입니다. 또 다른 예시로, N=3이고 각 동전이 각각 3원, 5원, 7원짜리 동전이라고 가정합시다. 이때 동빈이가 만들 수 없는 양의 정수 금액 중 최솟값은 1원입니다. 풀이 나의 풀이는 우선 만들 수 있는 화폐단위까지 boolean 배열을 만든 후 동전으로 금액을 만들 수 있으면 true를 넣어주었다. 그리고 처음부터 돌다가 false를 만나면 출력하게 하였다. 아..

코딩테스트 2022.01.25