본문 바로가기

전체 글

(121)
[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을 활용해 순회해주며 알아낸..
우테코 웹 백엔드 1차 합격 및 최종 불합격 후기 우아한 테크코스가 끝난지 좀 지났고 안 쓰려 했는데 그냥 일기라 생각하고 적어본다.우테코를 도전하는 사람들에게 조금이나마 도움이 되면 굿 약 1달간의 프리코스 과정이 끝나고사실 1차 합격 할 것 같지 않아서 머리속에 잊고 살았다.당연히 1차 합격 발표일도 까먹고 있다가 우연히 메일에 1차 발표 메일이 와 있어서 알게 되었다.   저때나 시험보러 갈 때나 지금이나 어떻게 합격했는지 정말 의문이었다..프리코스 2주차까진 mvc패턴은 사용도 안했고 죄다 main에서 코딩하다3주차때야 어설프게 적용해보려 했기 때문에 프리코스 테스트 케이스는 통과했지만완성도 있는 코드라고는 생각하지 않았고 합격을 기대하진 않았었다. 아무튼 전혀 생각하지 않았던 합격 소식이라 기쁘기도 했지만 최종 코테를 제대로 준비하지않고 있었기..
[JAVA] 백준 - 1920 수 찾기 이분탐색을 사용하는 문제다. 알고리즘 문제들을 풀며 느낀 것 중 하나인데 문제를 읽어보고 뭔가 완전 탐색을 진행해야 될 것 같은데 문제에서 주어지는 데이터의 범위가 엄청 크다면 -> 이분탐색 데이터의 범위가 작다면 -> 완전탐색 인 것 같다. 물론 모든 문제가 그렇지 않을 것이고 그냥 개인적인 느낌이다. 🤔 문제 접근 주어진 M개의 데이터가 N개의 숫자 중 존재하는지 확인하면 되는 문제다. 문제를 보고 N개의 숫자 데이터를 ArrayList에 담은 뒤 contains 메서드를 이용해 풀고자 했지만 시간초과가 났다. 그 이유는 contains 메서드는 데이터 n개 내에서 A라는 데이터가 존재하는지 확인 할 때 n개 데이터 전체를 완전 탐색하기 때문에 최악의 경우 작업 횟수가 n*m 번 진행된다. 따라서 이..
[JAVA] 백준 - 9019 DSLR Solved.ac class 에서 풀어볼만한 문제들이 많아서 풀고있다. 백준 online judge 에서 어떤 문제를 풀어야할지 모르겠다면 class문제들을 풀어보는 것을 추천한다. DSLR 문제는 class 3++ 문제 중 정답률도 낮고 상당히 난이도 있는 문제였다. 🤔 초기 문제 접근 Original 숫자가 Target 숫자가 되기 위해서 DSLR 명령어를 사용해 가능한 모든 경우의 수 중 제일 짧은 명령어를 찾는 문제이기 때문에 완전 탐색 문제라고 생각했다. 초기 코드의 흐름은 재귀적인 방법으로, DSLR 명령어를 수행한 값을 다시 parameter로 넣어주며 StringBuilder 에 명령어를 append 해주는 방식이었다. 이때 num(parameter) == target이면 result 문자..
[JAVA] 백준 14502 - 연구소 삼성 SW 역량 테스트 기출 문제 중 하나인 연구소 문제이다. 🤔 문제 접근 당연한 얘기지만 벽을 어떻게 세우느냐가 가장 중요한 포인트라고 생각했다. 하지만 벽을 세우는 기준을 잡기가 어려웠다. [예제 1] 예제 1의 맵을 봤을 때, 왼쪽 상단의 바이러스인 2 의 오른쪽 [1,2] 과 아래 [2,1] 에 벽을 세우고, 마지막 벽은 좌표 [4,6]에 세우면 안전구역 넓이가 최대가 된다. 이것과 예제2, 3의 경우를 보고 바이러스인 2를 기준으로 그래프 탐색을 해야하는지 기존에 벽이었던 1에서 그래프 탐색을 통해 새로운 벽 3개를 세워야 할지 고민이었다. ✅ 핵심 풀이 위 고민의 답은 바로 "완전 탐색" 이었다. 기존 맵 전체를 확인하여 [i, j]의 좌표가 0 인 경우, 벽을 세울 수 있는 장소가 된다. ..

반응형