Algorithm/이코테 48

16.연구소

📍 문제 설명 💡 접근 1.빈 공간에 벽설치 2.벽이 3개 설치 됐을 때 2인 지점 바이러스 전파 3.남아 있는 안전 영역 크기 중 최댓값 저장 2.에서 기존 배열이 아닌 기존 배열을 저장하는 임시 배열을 쓴 이유는 상하좌우를 탐색해나가면서 종착점에 대한 기준이 있어야 그 종착점에서의 안전 영역 크기를 구한 후 배열을 원래의 값으로 변경시키는데 없기 때문에 쓰고나서 버릴 배열을 사용했다. 👩‍💻 코드 import java.util.*; public class Main { static int[] dx = {-1,1,0,0}; static int[] dy = {0,0,-1,1}; static int n, m, result; static int[][] map, temp; public static void ma..

Algorithm/이코테 2022.01.07

15.특정 거리의 도시 찾기

📍 문제 설명 💡 접근 4개의 숫자중에 2개를 뽑는 순열문제임 방문안한 노드에 대해서만 거리 기록하여 풀이 👩‍💻 코드 import java.util.*; public class Main { static ArrayList graph; static int[] ch, dis; public static void main(String[] args) { Scanner kb = new Scanner(System.in); int n = kb.nextInt(); //도시 갯수 int m = kb.nextInt(); //도로 갯수 int k = kb.nextInt(); //거리 정보 int x = kb.nextInt(); //출발 도시 번호 ch = new int[n+1]; //도시 방문 체크 배열(1번 부터) dis ..

Algorithm/이코테 2022.01.07

13.치킨 배달

📍 문제 설명 💡 접근 강의에서 배웠던 피자 배달거리 문제와 똑같은 문제다. 처음에는 치킨집의 갯수 중에 1개,2개, .. 뽑는 것중 도시의 치킨 거리가 제일 작게 되는 갯수를 찾는 줄 알았다. 하지만 이미 폐업할 치킨집의 갯수는 정해져 있고(m) 어느 치킨집들이 선택이 되어 도시의 치킨 거리가 최소가 되는지 찾는 문제였다. 조합 부분은 아래의 코드를 기억하자! chickenLen개 중에서 combi(m) 만큼 뽑는 조합을 찾는 메서드임 for(int i = s; i < chickenLen; i++) { combi[L] = i; solution(L+1,i+1); } 👩‍💻 코드 import java.util.*; public class Main { public static ArrayList chicken..

Algorithm/이코테 2022.01.06

11.뱀

📍 문제 설명 💡 접근 비슷한 문제를 풀었던 것 같은데, 뱀의 방향 변환 정보에 대한 처리가 미흡해서 그 부분은 풀이를 참고했다. nx, ny를 이용해서 뱀을 이동시키고 벽이나 자기 몸에 부딪히는지 확인하면 되는 문제였다. 사과가 없을 때 꼬리를 잘라내야하므로 큐를 이용해서 꼬리 부분을 0으로 만들어주었다. 그리고 방향 전환 시각이 되면 동남서북 or 동북서남으로 이동할 수 있게 turn 메서드를 이용했다. 👩‍💻 코드 import java.util.*; public class Main { //90도 회전을 위한 배열(동남서북 순으로 저장) public static int[] dx = {0,1,0,-1}; public static int[] dy = {1,0,-1,0}; public static Arra..

Algorithm/이코테 2022.01.06

10.자물쇠와 열쇠

📍 문제 설명 https://programmers.co.kr/learn/courses/30/lessons/60059 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 💡 접근 일단 key는 영역을 벗어나도 되니 lock의 범위를 넓혀서 key의 제일 아래부분과 lock의 제일 윗부분부터 맞춰가보도록 한다. key인 M은 항상 lock인 N이하라고 했으니 같을 경우가 최대라고 생각해보면 NXN 이라면 N배만큼 큰 자물쇠를 만들어도 풀리는 문제였다. 처음과 끝까지 돌지 않기 위해 범위를 지정해놓고 돌리려했는데, 4X4로 그려서 보니 생각하는 범위가 아니여서 전체 ..

Algorithm/이코테 2021.12.11

9.문자열 압축

📍 문제 설명 💡 접근 x개로 잘랐을 때의 문자열을 잘 넣어주긴 했는데 마지막 배열의 문자열의 처리와 정확히 x개로 잘리지 않았을때 남는 문자열에 대한 처리에 대해서 좀 많이 고민했다. 빈칸을 하나넣어줘서는 1개로 잘랐을 때의 마지막 문자열 처리밖에 되지 않아서 마지막 배열일 때 cnt 값에 따라 문자열이 더해질 수 있도록 했고 정확히 x개로 잘리지 않았을 때는 자른 문자열 subStr 변수에 그대로 남아있을테니 모든 처리 후 마지막에 해당 문자열을 넣어줘서 처리했다. 👩‍💻 코드 import java.util.*; public class Main { public static void main(String[] args) { Scanner kb = new Scanner(System.in); String s..

Algorithm/이코테 2021.12.11

8.문자열 재정렬

📍 문제 설명 💡 접근 문자, 숫자 범위로 나누어서 문자는 문자대로 더하고 숫자는 숫자자체로 더하기 👩‍💻 코드 import java.util.Arrays; public class Main { public static String solution(String s) { String answer = ""; int n = 0; char[] c = s.toCharArray(); Arrays.sort(c); System.out.println(c); //문자 먼저 더하기 for(int i = 0; i < c.length; i++) { if(Character.isAlphabetic(c[i])) answer += c[i]; } //숫자 더하기 for(int i = 0; i < c.length; i++) { if(Cha..

Algorithm/이코테 2021.12.11

7.럭키 스트레이트

📍 문제 설명 💡 접근 짝수로만 들어온다고 했으니 N/2로 나눈후 각 자릿수 합하기 👩‍💻 코드 public class Main { public static String solution(int n) { String answer = ""; String s = String.valueOf(n); int left_cnt = 0; int right_cnt = 0; for(int i = 0; i < s.length()/2; i++) { left_cnt += s.charAt(i) - '0'; } for(int i = s.length()/2; i < s.length(); i++) { right_cnt += s.charAt(i) - '0'; } if(left_cnt == right_cnt) answer += "LUCKY..

Algorithm/이코테 2021.12.11

6.무지의 먹방 라이브

📍 문제 설명 https://programmers.co.kr/learn/courses/30/lessons/42891 코딩테스트 연습 - 무지의 먹방 라이브 programmers.co.kr 💡 접근 처음에는 while, for문을 이용해서 풀려고 했으나 다 먹은 음식도 계속해서 체크를 하기 때문에 오답이었다. ArrayList로 해보려 했지만 음식을 없앨 순 없어도 음식 번호를 기억하는게 불가능했다. 그래서 큐를 사용해보기로 했다. 음식을 먹고나서 처리를 해주었다. 정확성은 15, 30번만 제외하고 풀렸다. 왜 틀린지는 질문란과 인터넷 검색해도 잘 안나와있어서 보류.. -> 우선순위 큐를 이용해야만 효율성 점수를 받을 수 있는 문제라고한다. 왜 큐로는 효율성에서 탈락할까를 생각해봤다. 문제를 보면 네트워크..

Algorithm/이코테 2021.12.10