알고리즘 39

[백준 9012] 괄호 / Kotlin

분류 번호 알고리즘 난이도 링크 BOJ 9012 Stack, 문자열 실버 4 풀이 1. 스택 사용 2-1. '(' 일 경우, 스택에 무조건 넣음 2-2. ')' 일 경우 a. 스택이 비어 있으면 NO, 현재 문자열을 검사하는 반복문에 대해서 break b. 스택에 괄호가 있으면 pop 후에 이어서 진행 코틀린 공부도 할 겸, 겸사겸사 오랜만에 알고리즘 풀기 자바 경험에 의존해서 작성하니까 코틀린도 자바스럽게 풀어 버림 😊👌 자바였으면 5분도 안 걸렸을 거 코틀린으로 하려니 아리까리 (ㅠㅠ) 코틀린을 좀 더 코틀린스럽게 짜려면 스프링만 할 게 아니라 코틀린도 해야겠다. (기초만 후다닥 하고 넘어가버리니까 얕은 지식으로 눈 가리고 아웅 하고 있는 듯...ㅠ) 더보기 import java.util.* impo..

알고리즘왕/BOJ 2021.11.22

[프로그래머스/JAVA] 가장 큰 수

풀이 int 배열을 String 배열로 변경 문자열을 comparator로 정렬 str1 + str2와 str2 + str1를 비교 둘 중 더 크게 만드는 놈을 앞으로 앞에서부터 Stringbuilder에 넣어서 tostring으로 반환 주어진 모든 숫자가 0일 경우 반환값은 "0"이어야 함 비고 ㅋㅋ ㅠㅠㅠ 한줄이면 끝나는 것을./... 정말 어려웠다 ㅠㅠ 더보기 package 연습문제.P42746_가장큰수; import java.util.Arrays; import java.util.Comparator; public class Solution { static public String solution(int[] numbers) { StringBuilder answer = new StringBuilder(..

[프로그래머스/JAVA] 동굴탐험

풀이 위상정렬, deque 사용 현재 방문한 방과 연결된 방 전부를 que의 앞에 넣음 진입차수가 0보다 클 경우 탐색이 불가하므로 que의 뒤에 넣음 비고 queue => deque 했을 뿐인데 효율성 마지막 케이스를 통과했다 ㅎㅂㅎ...! 어렵다 어려워~ 더보기 package KakaoIntern2020.P67260_동굴탐험; import java.util.ArrayList; import java.util.Arrays; import java.util.Deque; import java.util.LinkedList; public class Solution { public static boolean solution(int n, int[][] path, int[][] order) { boolean answe..

[프로그래머스/JAVA] 경주로 건설

풀이 4방탐색/bfs visit 배열 대신 최저 값을 가지고 있는 2차원 int 배열 min을 사용 지금 비용이 min에 저장되어 있는 값보다 크면 continue dr, dc로 선언한 방향의 index가 상-0, 하-1, 좌-2, 우-3으로 index/2 값이 같으면 100원만, 다르면 600원 추가 여기서 상하/좌우 따질 필요없이 직전의 d와 현재 d만 같으면 100원 나머지는 600원 해도 될 듯 어차피 직전 d의 반대방향일 경우 min[][]의 값이 올라서 쓸모 없어짐 비고 if (min[nr][nc] < cost) continue; 처음에는 = 0 && c < N) return true; return false; } static class Node implements Comparable { in..

[프로그래머스/JAVA] 징검다리 건너기

풀이 stones에서 가장 큰 값을 right로 설정하여 이분탐색 진행 mid보다 작은 값이 연속으로 k개 이상 나타날 경우 불가능 => 오른쪽으로 ㄱㄱ (left = mid+1) 반대의 경우 왼쪽으로 => right = mid - 1; 비고 이분탐색... left right 아 어쩌란 말이냐ㅕ~~~~~ 범위 설정이 세상에서 제일 어렵구요 ㅠㅠ 더보기 package KakaoIntern2019.P64062_징검다리건너기; public class Solution { static int solution(int[] stones, int k) { int max = 0; for (int i = 0; i < stones.length; i++) { max = Math.max(stones[i], max); } int ..

[프로그래머스/JAVA] 불량 사용자

풀이 아이디의 최대가 최대 8개이기 때문에 조합으로 가능 user id 중 banned id의 개수만큼 조합으로 고름 banned id에 해당하는 경우만 최종적으로 고른 user id의 index를 stringbuilder로 이어붙임 어차피 한자리수*banned id개수니까 가능함 이어 붙인 문자열을 set에 넣음 해당 문자열이 set에 존재할 경우 0 반환 아닐경우 1 반환 비고 각각 다른 banned_id에 의해 걸렸더라도 제재아이디의 목록이 같으면 하나의 경우임 더보기 package KakaoIntern2019.P64064_불량사용자; import java.util.HashSet; public class Solution { static HashSet set; static public int solu..

[프로그래머스/JAVA] 크레인 인형 뽑기 게임

문제요약 NxN 보드에서 하나씩 뽑아서 바구니에 넣기 바구니에서 똑같은 거 두개 쌓이면 터짐 터진 인형 개수 구하기 풀이 각 컬럼을 스택으로 만들어서 넣어 놓음 moves 순서대로 stack에서 인형을 꺼냄 바구니도 스택으로 바구니에서 peek으로 확인 꺼내온 인형과 같으면 pop해서 버림 다르면 push 더보기 package KakaoIntern2019.P64061_크레인인형뽑기게임; import java.util.Stack; public class Solution { static int solution(int[][] board, int[] moves) { int answer = 0; final int N = board.length; Stack[] stacks = new Stack[N]; Stack b..

[BOJ/20057/JAVA] 마법사 상어와 토네이도

날짜 분류 번호 알고리즘 분류 21-04-06 BOJ 20057 구현, 시뮬레이션 링크 문제 요약 토네이도가 중점을 시작으로 이동 이동하면서 각 칸에 있는 모래가 날아감 주변 칸에 비율이 정해져 있고 이동하고 남은 모든 모래는 이동한 칸의 앞칸으로 전부 이동 밖으로 나간 모래의 양 구하기 풀이 기존의 모래를 전부 더함 토네이도가 상하좌우로 움직이면서 모래가 이동할 위치를 tr, tc 배열로 미리 정해놓음 남은 모래를 기존의 모래 총합에서 뺌 더보기 package b20.BOJ_20057_마법사상어와토네이도; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class..

알고리즘왕/BOJ 2021.04.06

[프로그래머스/42889/JAVA] 실패율

Kakao Blind Recruitment 2019 날짜 분류 번호 알고리즘 분류 21-03-31 프로그래머스 42889 구현? 링크 문제 요약 각 스테이지의 실패율을 구하여 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호를 정렬하여 반환 실패율 = 도달했지만 클리어X인 사람 / 도달한 사람 풀이 각 스테이지에 머물러 있는 사람의 숫자를 구함 스테이지1부터 머물러있는 사람/도달한 사람(=실패율) 계산 도달한 사람 = 전체 - 이전단계에 머물러 있는 사람 실패율과 스테이지의 번호를 담고 있는 Node객체를 pq에 넣어 정렬 pq에서 하나씩 빼면서 정답 배열에 넣음 비고 휴.... 내일은 레벨 3으로 풀어야지... 더보기 package KakaoBlindRecruitment2019.P42889_실패율..

[프로그래머스/42890/JAVA] 후보키

Kakao Blind Recruitment 2019 날짜 분류 번호 알고리즘 분류 21-03-29 프로그래머스 42890 subset 링크 문제 요약 주어진 테이블에서 후보키 찾기 유일성과 최소성이 보장되어야 함 풀이 dfs(subset)을 사용하여 속성의 부분집합을 전부 구함 선택된 속성들만 가지고 객체를 만들어서 set에 넣음 (중복 허용X) set의 크기가 처음 주어진 table의 튜플 개수와 같으면 유일성이 보장된다는 의미 유일성이 보장되는 속성들의 리스트를 만듦 속성들의 리스트를 크기 순으로 정렬 list의 크기만큼 반복문을 돌리면서 result에 있는 집합들과 비교 최소성 비교 최소성이 만족되는 경우에만 result에 넣음 비고 급하게 풀어서 코드가 깰꿈하지 못함 ㅠㅠ 더보기 package K..