본문 바로가기

프로그래머스22

프로그래머스 lv2 - 행렬 테두리 회전하기 (자바) 문제프로그래머스 lv2 - 행렬 테두리 회전하기풀이구현 문제내 풀이회전시켜야 할 위치(y,x)와 회전시키기 전 그 위치의 값을 순서대로 리스트에 저장저장한 리스트에 있는 값을 새로운 배열에 한 칸 씩 오른쪽으로 밀어서 저장한 칸 씩 밀어서 만든 배열의 값을 회전시키야 할 위치(y,x)에 맨 앞부터 순서대로 넣음어려웠던 점c++에는 배열을 한 칸씩 미는 rotate() 함수가 있는데, 자바에서는 그게 없어서 직접 구현해야 해서 번거로웠다.코드내 코드 (맘에 안 듬)import java.util.*;class Solution { static int[] dy = {0, 1, 0, -1}; // 우 하 좌 상 static int[] dx = {1, 0, -1, 0}; public int[] so.. 2024. 6. 21.
프로그래머스 lv2 - k진수에서 소수 개수 구하기 (자바) [2022 KAKAO BLIND RECRUITMENT] 문제프로그래머스 lv2 - k진수에서 소수 개수 구하기풀이모든 소수 조건이 0이 포함되어 있기 때문 문자열을 "0"을 기준으로 나누면 된다.-> 주의 사항으로 "110011"인 경우 나누면 11,'',11이 되므로 나눌 때 정규표현식을 사용하여 0{1,}로 나눠야 한다.내가 놓친 부분처음 풀었을 때 테케 1, 11번 런타임 에러 발생했다.-> n의 최대가 100만이라서 n진법 변환시 string 길이가 int 범위를 넘어가는 경우가 생겨서 발생한 문제그래서 k진법으로 변환된 string을 long type으로 바꿔줘야 한다.그 후 11번 테케는 통과했지만 1번 테케는 여전히 시간초과 발생했다.-> 변환한 long 타입 숫자(num)가 매우 큰 경우가 있기 때문에 아래 for문을 돌면 시간초과가 발생한다... 2024. 6. 19.
프로그래머스 lv2 - H-Index (자바) 문제프로그래머스 lv2 - H-Index풀이이분탐색문제에서 h의 최댓값을 요구하므로 h의 값을 이분탐색의 기준으로 한다.h(논문별 인용 횟수)는 0회 ~ 10000회 이므로 lo = 0, hi = 10000으로 잡고 이분탐색 시작h의 최대값을 구하는 것이므로 h가 조건에 맞다면 h를 갱신한 후 lo를 h + 1로 옮김h가 조건에 맞지 않으면 hi를 그 시점 h - 1로 옮김코드import java.util.*;class Solution { public int solution(int[] citations) { int answer = 0; Arrays.sort(citations); int lo = 0, hi = 10000; int mid = 0; .. 2024. 6. 19.
프로그래머스 lv2 - 게임 맵 최단거리 (자바) 문제프로그래머스 lv2 - 게임 맵 최단거리풀이매우 기초적인 bfs 최단거리 문제bfs를 이용해서 최단 거리를 visited[][] 배열에 갱신한다.최종 목적지인 visited[n][m] 에 들어 있는 값이 최단 거리가 된다.코드import java.util.*;class Solution { static int[] dy = {-1,0,1,0}; static int[] dx = {0,1,0,-1}; public int solution(int[][] maps) { int n = maps.length, m = maps[0].length; // 세로, 가로 int[][] visited = new int[n][m]; Queue q = new LinkedL.. 2024. 6. 19.
프로그래머스 lv2 - 방문 길이 (자바) 문제프로그래머스 lv2 - 방문 길이풀이좌표평면을 2차원 배열로 생각하여 접근할 수 있는가와 방문처리를 어떻게 할 것인지가 핵심 포인트좌표평면 2차원 배열 구조로 생각하기좌표평면 범위가 -5 ~ 5이므로 2차원 배열로 바꿔 생각하면 [11][11] 형태로 다 담을 수 있음-> 좌표평면의 각 선이 있는 곳들을 칸과 일치시켜서 생각-> 좌측 최상단이 [0][0], 그 아래 선이 있는 곳이 [1][0]...방문처리 어떻게 할 것인가한번 지난 길은 다시 지날 경우 카운팅 해주면 안됨해당 칸 방문시 어느 방향에서 오는지를 체크해야 하므로 방문 처리를 2차원 배열이 아니라 3차원 배열로 해야 함visit[11][11] ( x )visit[11][11][4] ( o )-> 해당 점으로 상,하,좌,우 방향에서 들.. 2024. 6. 18.
프로그래머스 lv3 - 셔틀버스 (자바) [2018 KAKAO BLIND RECRUITMENT] 문제프로그래머스 lv3 - 셔틀버스풀이크루 대기열을 시간순으로 정렬한다.버스가 도착할 때마다 탈 수 있는 크루원을 순차적으로 태운다.순차적으로 태우다가 버스에 태울 수 있는 최대 인원이 되었을 경우 태우는 것을 종료하고 다음 버스 순서로 간다.버스가 운행을 종료한 후 태운 사람 수가 버스 최대 인원보다 적으면 마지막 버스의 도착 시간이 답이다.버스가 운행을 종료한 후 태운 사람 수가 버스 최대 인원만큼 찼다면 마지막 탄 크루원 시간보다 1분 앞이 답이다.어려웠던 점버스에 순차적으로 크루원을 태우는 로직을 가독성이 좋게 짜는 방법을 고민하는 데 시간이 좀 걸렸다.버스를 다 태운 후 콘이 타야 할 시간을 체크하는 방법이 예외 케이스가 있는지 생각하느라 시간이 좀 걸렸다.코드import java.util.*;.. 2024. 6. 17.