본문 바로가기

코딩테스트

(66)
[JAVA] 백준 - 2023 신기한 소수 🖥️ 문제 🎓 문제 풀이 입력으로 신기한 소수의 자릿수가 주어진다. 10미만의 소수는 2,3,5,7이 있으므로 소수를 미리 배열에 정의했다. 왼쪽에서부터 시작하여 n자릿수가 되기까지의 숫자가 전부 소수가 되어야함을 유의하여 풀어야한다. 🚨CODE import java.io.*; import java.util.*; public class Main { static String[] prime = {"2","3","5","7"}; static int n; static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(n..
[JAVA] 백준 - 11724 연결 요소의 개수 그래프 연결 요소가 몇개인지 그래프 탐색을 통해 알아내는 문제이다. 🚨CODE ✅DFS import java.io.*; import java.util.*; public class Main { static int[][] graph; static boolean[] visit; static int count = 1; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextTo..
[JAVA] 백준 - 11659 구간 합 구하기 4 ✅ 핵심 풀이 수의 개수와 구해야 하는 횟수가 둘 다 10만 이므로 만약 문제에서 주어지는 데이터가 n과 m모두 10만인 최대치로 주어진다면 구해야하는 횟수 x 수의 범위 => 100억으로, 시간 제한인 1초(약1억)를 넘어가게 된다. 따라서 해당 문제는 a부터 b까지의 범위에 대한 합 정보, 다시 말해 구간 합의 정보를 미리 저장해두고 i번째와 j번째 수의 합을 출력해야 시간초과를 하지 않게 된다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStream..
[JAVA] 프로그래머스 - 피로도 프로그래머스 고득점 알고리즘kit 완전탐색 lv.2 문제인 피로도 문제다. 각 던전에 입장할 수 있는 최소한의 피로도와 던전을 탐험했을 때 소모되는 피로도를 고려하여 최대한 많은 던전을 탐험하고 그때의 던전 수를 구하면 된다. ✅ 핵심 풀이 모든 경우의 수에 대해서 던전을 탐험하고 탐험이 완료된 뒤 탐험 횟수의 최대 값을 갱신해 주면 된다. 따라서 완전탐색을 이용하여 풀었고 탐험했던 던전을 중복하여 탐험하지 않기 위해 boolean 타입의 visit 배열을 사용했다. 하지만 간과한게 하나 있었으니, 처음에 현재 피로도가 최소 필요 피로도보다 작은 경우 해당 던전을 방문처리하고 continue로 넘어가도록 코드를 짰는데 테스트 케이스는 통과했으나 다른 테스트 케이스에서 실패가 뜨고 말았다. 최소 필요 피로..
[JAVA] 프로그래머스 - 다리를 지나는 트럭 프로그래머스 고득점 kit 스택/큐 문제인 다리를 지나는 트럭 문제다. 백준에서 풀어봤던 적이 있던 문제라 어렵지 않게 풀 수 있었다. 다만 처음 접하는 경우 까다로운 조건이 몇 개 있어서 좀 어려울 수도 있다. ✅ 핵심 풀이 먼저 다리의 길이만큼 큐에 0을 넣었다. 트럭 한 개가 다리 길이 1만큼을 차지 하므로 트럭이 올라가지 않은 다리는 0으로 두는 것이다. q.poll() == 0 인 경우 지나간 트럭은 없고 q.poll() q.add() 해줄 때 마다 큐에 존재하는 트럭이 왼쪽으로 이동하므로 이 방법을 사용 하면 전체 다리 길이와 트럭이 다리를 건너는 시점을 따로 신경쓰지 않아도 된다. 그리고 truck_weights의 마지막 인덱스 값이 큐에 넣어진 경우 해당 트럭이 나갈때까지 q.poll() ..
[JAVA] 프로그래머스 - 베스트 앨범 프로그래머스 고득점 알고리즘 kit의 마지막 문제인 베스트 앨범이다. ✅ 핵심 풀이 문제에 나온 1번째 조건인 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 을 만족하기 위해 장르 별 노래 재생 횟수를 count 하고 저장하기 위해 Map 을 사용하고 Map 내 value (재생 횟수) 를 기준으로 key(장르) 를 내림차순 정렬한다. 장르의 정렬 결과를 List에 저장하고 정렬된 장르(rankedGenre)를 기준으로 genres 배열을 순회하여 rankedGenre == genres[i] 인 경우 해당 노래의 genre와 재생 횟수인 play, 그리고 해당 노래가 배열의 몇 번째 원소였는지에 대한 idx를 Album 객체의 리스트인 list에 저장해주었다. 이후 문제의 2번째 조건 장르 내에서 많..
[JAVA] 백준 - 14620 꽃길 (feat. JAVA 얕은 복사, 깊은 복사) 🕶️ 문제 풀기 앞서 알고 넘어가면 좋은 것 모든 경우의 수를 알아야하는 완전 탐색 문제이다. 본인은 완전탐색 같은 문제를 풀 때, 문제마다 다르지만 보통 재귀함수를 사용하는 편이다. A라는 경우에서 -> B 경우를 고려하고 -> C 경우 일 때의 최소 or 최대 같은 경우에 해당되는데 앞선 단계에서 ~~는 이미 고려했다! 라는 정보를 메모라이징 하기 위해 boolean형식의 visit를 사용해 true, false 처리를 해주고, 재귀를 하는 메서드의 파라미터로 넘겨주곤 하는데 이번 문제에서는 재귀 호출하는 B(=A)라는 메서드에서 return 후 상위 스택의 동일한 메서드 A로 갔을 때 visit의 상태가 바뀌지 않아서 의도한 결과 값이 나오지 않아 애를 먹었다. 명확하게는 visit의 상태가 재귀 ..
[JAVA] 프로그래머스 - 의상 고득점 알고리즘 kit에 수록된 의상 문제다. 백준에서 동일한 문제를 풀었던 기억이 있으나 한번에 성공하지 못했다.. 새로운 문제와 알고리즘을 푸는 것도 중요하지만 복습의 중요성도 느꼈다.. 🤔 문제 접근 주어지는 입출력 예시는 다음과 같다. 의상 이름인 clothes[i][0] 은 중요하지않고 의상 종류인 clothes[i]의 2번째 데이터, clothes[i][1]을 가지고 풀어야한다. 종류별로 한 벌씩만 입을 수 있기 때문에 의상 이름은 중요하지 않고 의상 종류에 주목해야 하기 때문이다. ✅ 핵심 풀이 내가 풀었었던 문제임에도 한번에 풀지 못했던 이유인 "해당 의상을 안 입었을 경우"를 고려해야한다. clothes[i][1]을 Map에 put해주고 Map의 entrySet을 활용해 순회해주며 알아낸..

반응형