본문 바로가기
프렌즈4 블록 - 2018 KAKAO BLIND RECRUITMENT (Java, Level 2) 처음 풀이 1. 삭제할 블록 체크 2. 블록 삭제 3. 블록 이동 이 세 과정을 더 이상 삭제할 블록이 없을 때까지 반복하면 된다. //각 글자를 요소로 할 2차원 배열 char[][] gameBoard; //사이클마다, 삭제할 2x2 블록의 첫 번째 원소의 좌표 담을 set Set set = new HashSet(); //삭제되는 블록의 갯수 int count; public int solution(int m, int n, String[] board) { //m x n 사이즈의 2차원 배열 생성 gameBoard = new char[m][n]; //게임 보드 알파벳 채우기 for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { gameBoard[i][j.. 2022. 3. 19.
튜플 - 프로그래머스 (Java, level 2) 처음 풀이 "{{1,2,3},{2,1},{1,2,4,3},{2}}" 에서 각 { } 묶음을 요소로 하는 String[]을 split(regex) 사용해서 만든다. (첫번째 요소 : "1,2,3" 두번째 요소 : "2,1" 세번째 요소 : "1,2,4,3") split()에 파라미터로 들어갈 정규 표현식은 "{{" "},{" "}}" 을 포함하면 된다. 이를 일반화하면, 1. { or } 둘 중에 하나 2. , 가 들어가거나 안들어가거나 3. { or } 둘 중에 하나 이 1, 2, 3이 하나의 그룹이면 된다. "( [ { } ] , ? [ { } ] )" 이를 정규표현식으로 나타내면 다음으로 나타낼 수 있다. (문자 사이사이 띄어쓰기는 무시) 주어진 문자열을 보면 항상 시작이 {{ 이므로 split()으.. 2022. 3. 16.
오픈채팅방 - 프로그래머스 (Java, Level 2) 처음 풀이 닉네임이 변경될 때마다 이전 로그기록을 수정해야한다. 따라서 어떤 유저인지에 대한 메시지인지 1차로 기록하고, 기록이 다 끝난 후 최종 닉네임으로 바꿔준다. 1차 기록은 {유저 아이디, 입장/퇴장 메시지} 형태로 List에 저장 닉네임 기록은 변경될 때마다 기존 값을 덮어써야 하니까 Map (key : 유저아이디, value : 닉네임)에 저장 import java.util.*; class Solution { final String ENTER_MSG = "님이 들어왔습니다."; final String LEAVE_MSG = "님이 나갔습니다."; //중간 결과물 담을 List ({유저아이디, ENTER_MSG or LEAVE_MSG}) //순서대로 결과 출력해야하니까 Queue 자료구조 List.. 2022. 3. 15.
단체 사진찍기 - 프로그래머스 (Java, Level 2) 전체적인 흐름 프렌즈들이 설 수 있는 전체 경우의 수는 8!이다. 이 모든 경우에 대해서 모든 조건이 맞는지 각각 따져본다. 즉, DFS로 프렌즈를 쭉 배치한 뒤, 8명이 다 섰을 때 해당 배치가 조건과 맞는지 체크한다. 프렌즈를 모든 경우의 수로 배치하는 메소드 (arrange()) 배치를 파라미터로 받고, 해당 배치가 조건들과 맞는지 확인하는 메소드 (check()) final char[] FRIENDS = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'}; boolean[] isUsed = new boolean[FRIENDS.length]; int answer = 0; //매번 data를 파라미터로 넘기지 말고 전역변수로 String[] conditions; public in.. 2022. 3. 14.
행렬 테두리 회전하기 - 프로그래머스 (Java, Level 2) ​ 처음 풀이 행렬 초기화하는 메소드 fillMatrix() query에 맞게 행렬을 회전하는 메소드 rotate()를 선언한다. 이 때, rotate()에서, 각 회전 당 이동하는 모든 숫자에 접근 가능하니 최솟값을 리턴한다. rotate()에서 숫자 한 칸씩 이동시킬 때, Queue에 현재 위치의 숫자를 담은 후, Queue 맨 앞 숫자로 치환한다. import java.util.*; class Solution { int[][] board; Queue queue; public int[] solution(int rows, int columns, int[][] queries) { board = new int[rows][columns]; queue = new LinkedList(); fillMatrix(r.. 2022. 3. 14.
게임 맵 최단거리 - 프로그래머스 (Java, Level 2) 처음 풀이 보자마자 dfs가 먼저 떠올랐다. 이동할 때마다 isOkToGo()로 범위, 방문 여부, 벽을 확인한다. 목적지에 도착하면 최솟값을 갱신한다. boolean[][] isVisited int min = Integer.MAX_VALUE; public int solution(int[][] maps) { isVisited = new boolean[maps.length][maps[0].length]; dfs(0, 0, maps, 1); //한 번도 갱신이 안되었으면 목적지에 도착하지 못한 것이니 -1리턴 return (min==Integer.MAX_VALUE)? -1 : min; }//solution() end public void dfs(int y, int x, int[][] maps, int cou.. 2022. 3. 5.
JadenCase 문자열 만들기 - 프로그래머스 (Java, Level 2) 처음 풀이 - 아스키코드 'A' -> 65, 'a' -> 97, 공백 -> 32 public String solution(String s) { StringBuilder sb = new StringBuilder(); //앞 단어 공백 확인 //맨 첫 단어때문에 true로 초기화 boolean spaceFlag = true; int length = s.length(); for(int i=0; i='A' && next='a') { //소문자 if(spaceFlag) { //앞이 공백이었다면 대문자로 next -= 32; }//if end }//if~else end spaceFlag = (next==32)? true : false; sb.append(next); }//for end return sb.toStri.. 2022. 3. 5.
피로도 - 프로그래머스 (Java, Level 2) 던전의 개수가 8개이므로, 완전탐색을 해도 괜찮겠다 생각했다. 그 중 dfs 방식을 사용했다. 처음 풀이 boolean[] isVisited; //각 중단조건에서 방문한 던전 수 저장할 queue PriorityQueue pq; public int solution(int k, int[][] dungeons) { isVisited = new boolean[dungeons.length]; //최댓값을 구하기 위해 최대 priority queue로 생성 pq = new PriorityQueue(Collections.reverseOrder()); dfs(k, dungeons); return pq.poll(); }//solution() end public void dfs(int k, int[][] dungeons.. 2022. 3. 2.
두 개 이하로 다른 비트 - 프로그래머스 (Java, Level 2) 시간초과 풀이 비트 논리 연산자와 bitCount() 활용한 풀이 public static void solution(long[] numbers) { //비트 논리 연산(&, |, ^, ~), bitCount()활용 for(int i=0; i 2022. 3. 2.
모음 사전 - 프로그래머스 (Java, Level 2) 풀이 1. 각 자리수마다 넘어가는 숫자의 규칙 public int solution(String word) { int answer = 0; char[] charWord = word.toCharArray(); int[] intArr = {781, 156, 31, 6, 1}; for(int i=0; i5) return; list.add(str); for(int i=0; i5) return; list.add(sb.toString()); for(int i=0; i 2022. 2. 25.