본문 바로가기

프로그래머스20

프로그래머스 lv2 - 전력망을 둘로 나누기 (자바) 문제프로그래머스 lv2 - 전력망을 둘로 나누기풀이주어진 그래프를 코드로 나타낼 수 있는지가 중요한 문제양방향 그래프 초기화 방법(1) 인접 리스트ArrayList를 배열로 선언ArrayList[] graph = new ArrayList[n + 1];for (int i = 1; i ();ArrayList를 2차원 ArrayList로 선언ArrayList> graph = new ArrayList();for (int i = 0; i ());편한 방식으로 선언하면 된다. ( 필자는 배열로 선언하는게 가독성이 더 좋다고 느껴졌음 )(2) 인접 행렬int[][] graph = new int[n + 1][n + 1];for (int i = 0; i 전력망의 송전탑 개수를 구하는 방법bfs or dfs 알고리즘을 사.. 2024. 6. 16.
프로그래머스 lv2 - 캐시 (자바) [2018 KAKAO BLIND RECRUITMENT] 문제프로그래머스 lv2 - 캐시풀이LRU : 가장 오랫동안 사용되지 않은 캐시를 새로운 캐시로 교체하는 알고리즘LRU 구현 : ArrayList를 사용캐싱이 되어있는지 여부 : HashMap을 사용ArrayList에서 해당 도시를 삭제하고 그 도시를 맨 뒤로 새롭게 넣는다.ArrayList의 크기가 캐시 사이즈만큼 꽉 찬 경우 맨 앞을 삭제하고 맨 뒤에 현재 도시를 넣음ArrayList의 크기가 캐시 사이즈만큼 차지 않은 경우 맨 뒤에 현재 도시를 넣음어려웠던 점체감상 lv1 같이 느껴질 정도로 쉬운 문제였다.코드import java.util.*;class Solution { public int solution(int cacheSize, String[] cities) { ArrayLis.. 2024. 6. 15.
프로그래머스 lv2 - 뉴스 클러스터링 (자바) [2018 KAKAO BLIND RECRUITMENT] 문제프로그래머스 lv2 - 뉴스 클러스터링풀이교집합과 합집합을 구하는 로직이 중요주의할 점집합 문제에서 java에서 제공하는 교집합 함수인 List.retainAll() 사용은 지양하자.테스트 케이스는 통과하더라도 예상치 못한 계산이 될 수 있는 가능성이 있다.위 로직만 생각해낸다면 충분히 풀 수 있는 문제이다.어려웠던 점처음 풀이 방법으로 java의 List 컬렉션의 retainAll()을 이용해 교집합을 구했다.retainAll()은 더 작거나 같은 길이의 list에서 사용해야 한다는 것을 처음 알았다.ex) l1.retainAll(l2); // l1의 길이가 l2보다 작거나 같은 경우하지만 위 방식으로 풀었는데도 정확성이 53점으로 실패했다.결국 처음 풀이을 완전히 뒤엎고 교집합, 합집합 구하는 걸.. 2024. 6. 15.
프로그래머스 lv2 - 프렌즈4블록 (자바) [2018 KAKAO BLIND RECRUITMENT] 문제프로그래머스 lv2 - 프렌즈4블록풀이2 * 2형태의 정사각형 형태로 같은 블록인지 체크하면 되므로 매 위치마다 현 위치의 오른쪽, 대각선 아래, 아래를 체크만약 4칸이 다 같으면 해당 칸들을 지워야 할 블록 list에 추가visited로 방문 처리를 하면 안되기 때문에 이미 지울 칸으로 선택되어 list에 들어간 칸이 또 list에 들어갈 수 있음-> 그러므로 이번 턴에 지워지는 블록 개수를 체크할 때 이미 지워진 칸이라면 개수를 카운팅 해주지 않도록 주의어려웠던 점문제를 꼼꼼히 읽지 않아서 그림만 대충 보고 아~ 이거 dfs로 같은 그림은 전부 탐색해서 사라지게 하면 되겠다 생각하고 로직을 bfs를 사용해서 구현했다. 그래서 테스트 케이스가 틀린 후 다시 문제를 확인하니 2*2 형태로 4개가 붙어.. 2024. 6. 14.
프로그래머스 lv2 - 방금그곡 (자바) [2018 KAKAO BLIND RECRUITMENT] 문제프로그래머스 lv2 - 방금그곡풀이방법 1처음 시도한 방법음별로 나눠서 처리하기 위해 음마다 배열에 순서대로 담아서 배열끼리 비교하는 방식코드가 너무 복잡해져서 실수가 발생하여 절반 정도의 테스트 케이스만 맞힘방법 2#이 붙어있는 음을 악보에 없는 음으로 치환코드가 깔끔해져서 실수를 하지 않고 모든 테스트 케이스 통과했음어려웠던 점문제 접근 방식을 처음에 복잡한 방법으로 접근하여 고생을 많이 했다.코드첫 번째 풀이 ( 62.9점 맞음 ) - 배열에 악보에 있는 음별로 저장해서 비교import java.util.*; class Solution { public String solution(String m, String[] musicinfos) { String ans = ""; .. 2024. 6. 13.
프로그래머스 lv2 - 파일명 정리 (자바) [2018 KAKAO BLIND RECRUITMENT] 문제프로그래머스 lv2 - 파일명 정리풀이정렬과 문자열에서 원하는 문자열을 추출할 수 있는지를 묻는 문제정렬람다식을 이용해 배열을 정렬문자열 추출head 부분 추출 : split("[0-9]") 정규표현식을 활용해서 숫자를 기준으로 문자열을 나눔number 부분 추출 : 뽑은 head 부분 다음부터의 문자열에서 숫자를 체크하기 위해 substring()으로 head 부분을 잘라냄코드처음 제출한 코드 ( 통과하긴 했지만 코드가 맘에 들지 않았음 )import java.util.*;class Solution { public String[] solution(String[] files) { Arrays.sort(files, (o1, o2) -> { String h1 = o1.. 2024. 6. 11.