본문 바로가기

Algorithm64

[백준] 21736-헌내기는 친구가 필요해-Java ❓문제 [백준] 21736-헌내기는 친구가 필요해-Java 🖊️풀이법 그래프 탐색법 중 BFS를 이용하여서 풀었다. 그리 어렵지 않은 문제였고 의사코드로 잘 정리하여 코드로 구현하면 된다. 캠퍼스의 정보를 담을 이차원 배열을 만들어준다. ㅁ해당 위치를 방문했는지 안했는지 확인하기 위한 이차원 배열을 만들어 준다. 각각의 주어진 데이터를 변수 N,M과 이차원 배열에 담는다. 캠퍼스 데이터를 이차원 배열에 담는 중 I의 위치를 변수에 저장해 준다. 해당 I의 위치는 이미 도연이가 서있기 때문에 방문처리 해준다. BFS방식으로 그래프를 순회한다. bfs 메서드 최초 현재 위치 int[]{x,y]를 큐에 담는다. 큐가 빌때까지 반복문을 반복한다. queue의 좌표값을 꺼내고 spot이라는 변수에 할당한다. sp.. 2023. 8. 11.
[백준] 11726-2xn 타일링-Java ❓문제 [백준] 11726-2xn 타일링-Java 🖊️풀이법 이번 문제는 DP를 이용하면, 아주 간단하게 풀 수 있다. 우선, 집적 경우의 수를 한번 구해보자. n = 1 -> 1가지 n = 2 -> 2가지 n = 3 -> 3가지 n = 4 -> 5가지 n = 5 -> 8가지 위의 4가지의 경우를 고려하였을 때, dp[n] = dp[n-1] + dp[n-2]라는 점화식이 세워진다. 따라서, 위의 점화식을 가지고, 코드로 구현해주면 된다. 주의❗️ 문제에서는 방법의 수를 10007로 나눈 나머지(모듈러 연산)를 출력하라고 한다. 이때 만약, 결과값에만 모듈러 연산을 적용해준다면, 앞서 dp[n-1]+ dp[n-2]에서 오버플로우가 날 수 있기 때문에, 틀리게 된다. 따라서, 반드시 dp[n]을 구하는 연산.. 2023. 8. 4.
[백준]11659-구간 합 구하기 4-Java ❓문제 [백준] 11659-구간 합 구하기 4-Java 🖊️알고리즘 (접근법) 이번 문제는 단순히 보면 매우 쉬운 문제 이다. 주어진 N개의 배열을 만들고, 주어진 배열의 요소를 집어넣은 후 단순히 시작 인덱스와 끝 인덱스를 받아서 합을 출력하면 된다. 하지만 이렇게 단순히 주어진 조건으로만 푼다면 시간초과가 출력될 수 있다. 이유는 N과 M의 범위가 100,000이기 때문에 만약 최악의 경우 100,000 * 100,000 번 연산을 해야하기 때문에 시간 제한 1초에 걸려 실패하게 된다. 따라서, 이번 문제는 단순히 반복문을 통한 합 연산이 아니라, 누적합을 이용해야 한다. 위의 문제 예시에서 단순히 주어진 조건만 생각하여 문제를 푼다면 이렇게 될 것이다. int[] arr : {5, 4, 3, 2, .. 2023. 7. 24.
[백준]1003-피보나치 함수-Java ❓문제 [백준]1003-피보나치 함수-Java 🖊️풀이법 정말 간단하게 풀 수 있는 문제일 줄 알았다. 구현 되어진 피보나치 함수 내에서 N이 0과 1이 호출 될 때 카운팅할 변수를 선언해주고 호출될 때마다 +1 해주면 된다. 라고 생각했지만.. 결과는 시간 초과..! 문제의 제한사항을 보면 0.25초의 시간제한이 있다. 따라서, 만약 N이 40일 경우에는 너무 많은 재귀호출이 일어나기 때문에, 시간제한 조건에 걸린다. 이번 문제에 대한 고민결과 DP(동적 계획법)을 사용하여 풀 수 있을 것 같았다. 동적 계획법이란, "특정 범위까지의 값을 구하기 위해서 그것과 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는 알고리즘 설계 기법이다." 라고 나무위키에 명시되어 있다. 이번 동적 계획법의 핵심은, .. 2023. 7. 20.
[백준] 7568-덩치-Java ❓문제 [백준] 7568-덩치-Java 🖊️풀이법 이번 문제는 간단한 비교 문제이다. 단지, 비교 대상이 하나인가 두개인가의 차이 정도이며, 핵심 규칙만 잘 정의한다면 손쉽게 풀 수 있을 것 이다. 우선 핵심 규칙을 알아보자. 키와 몸무게가 둘 다 넘을 경우에만, 등수가 +1이 된다. 키와 몸무게가 하나라도 넘지 않는 경우에는 등수가 +1이 되지 않는다.(즉, 이 두 비교군은 같은 등수로 본다.) 두가지의 기준을 참고해서 아래의 코드로 구현하였다. 정답 코드 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br =.. 2023. 7. 17.
[백준] 10250번-ACM 호텔-Java ❓문제 [백준] 10250-ACM 호텔-Java 🖊️풀이법 문제가 길고 복잡해 보이지만, 주어진 변수에 대한 원리와 공식만 찾는 다면, 손쉽게 풀 수 있다. 층을 구하기 위한 공식 층을 구하기 위해서는 호텔의 총 층수(H)와 몇 번째 손님인지(N)를 알면 손쉽게 구할 수 있다. 예를들어 6층짜리 건물에 10번째 손님의 경우, 손님의 배정은 무조건 한층씩 올라가게 되고, 꼭대기 층이 다 찰 경우 1층의 다음 호실로 이어지기 때문에 손님이 배정받을층은 H % N 이다.하지만 만약 H % N = 0 이 될 경우에는 층 수는 H가 된다. 호수를 구하기 위한 공식 호수를 구하기 위해서도 총 층수(H)와 몇 번째 손님인지(N)를 알면 손쉽게 구할 수 있다. 예를들어 6층짜리 건물에 10번째 손님의 경우에도 1층 부.. 2023. 7. 14.