본문 바로가기

알고리즘6

푸드 파이트 대회(Lv.1) 문제 설명 입출력 예시 요약 준비된 음식의 순서대로 먹는 개수만큼 숫자 출력 풀이 접근 방식 1. 각 음식의 개수를 참가자 수인 2로 나눈다. → 몫의 크기만큼 해당 음식의 숫자 저장 2. 두 번째 참가자 음식 정렬 → index = length()-1부터 0까지 감소해가며 문자열에 추가 코드리뷰 class Solution { public String solution(int[] food) { String setting = "";// 1번 참가자 음식 세팅 String answer = ""; for(int i = 1; i < food.length; i++) { int count = food[i]/2; for(int j = 0; j < count; j++) {// 2로 나눈 몫만큼 반복해서 해당 음식 숫자 .. 2024. 3. 24.
단지번호붙이기 문제 설명 입출력 예시 요약 아파트 단지의 개수와 각 단지에 속한 아파트 개수 구하기 풀이 접근 방식 1. 전체 단지의 모습을 담은 이차원 배열 graph 작성 → 전체 사이즈는 N+2로 설정(상하좌우 탐색을 위해 1~N 까지의 전체 단지를 둘러싸는 크기로 설정) → 1 : true, 0 : false로 아파트가 있는 곳 표시 2. 단지 개수 구하기 → graph의 첫 번째 row부터 순차적으로 방문하면서 true인 곳을 false로 변경 → 상하좌우 탐색 전 첫 방문시 단지 count ++ 3. 단지 내 아파트 개수 구하기 → 상하좌우 탐색해가며 true인 곳을 방문(dfs) → 방문 시 마다 아파트 count++ → 방문한 곳은 graph에서 false로 변경 코드리뷰 import java.util... 2024. 3. 24.
바이러스 문제 설명 입출력 예시 요약 1번 컴퓨터와 직.간접적으로 연결되어 있는 컴퓨터의 개수 구하기 풀이 접근 방식 1. 연결되어 있는 컴퓨터들을 이차원 배열로 표시 → graph[row][col], graph[col][row] 모두 true로 연결됨을 표시 2. 방문하지 않은 컴퓨터(노드) 확인 후 방문 → 재귀함수로 dfs 실행 코드리뷰 import java.util.*; public class Main { static int N, M; static int count = 0; static boolean[][] graph; static boolean[] visited; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N.. 2024. 3. 24.
체스판 다시 칠하기 문제 설명 입출력 예시 요약 흰색 또는 검은색을 기준으로 8x8 체스판을 만들 때 최소로 칠해야 하는 타일의 개수 구하기 풀이 접근 방식 1. 검은색 체스판을 만들기 위해 칠해야 하는 타일의 개수 → paintB() 메소드를 통해 구한다. 2. 흰색 체스판을 만들기 위해 칠해야 하는 타일의 개수 → paintW() 메소드를 통해 구한다. 3. 둘 중 최솟값 return 코드리뷰 import java.util.*; class Main { static List list = new ArrayList(); static String[] choices = {"BWBWBWBW", "WBWBWBWB"};// 검은색 line과 하얀색 line을 담은 배열 public static int paintB(int row, in.. 2024. 3. 22.
숫자 문자열과 영단어(Lv.1) 문제 설명 입출력 예시 요약 문자를 숫자로 바꾸기 풀이 접근 방식 1. 문자를 숫자로 바꾸기 → replaceAll() 메소드를 통해 변환 코드리뷰 import java.util.*; class Solution { public int solution(String s) { // 숫자를 문자형태로 담은 배열 만들기 String[] arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"}; for(int i = 0; i < arr.length; i++) { s = s.replaceAll(arr[i], String.valueOf(i));// repalceAll()을 통해 숫자로 변환 } int answ.. 2024. 3. 22.
피로도(Lv.2) 문제 설명 입출력 예시 요약 던전을 최대로 많이 돌 수 있는 경우의 수 구하기 풀이 접근 방식 1. 완전탐색을 위한 모든 경우의 수 구하기 → 던전의 개수가 3개인 경우: 012, 021, 102, 120, 201, 210 코드리뷰 import java.util.*; class Solution { HashSet set = new HashSet(); // 모든 경우의 수를 구하는 재귀함수 public void recursive(String comb, String remains, int maxLength) { if(!comb.isBlank() && comb.length() == maxLength) { set.add(comb); } for(int i = 0; i < remains.length(); i++) {.. 2024. 3. 22.