본문 바로가기
오픈채팅방 - 프로그래머스 (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.
최댓값과 최솟값 - 프로그래머스 (Java, Level 2) 처음 풀이 import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.StringTokenizer; class Solution { public String solution(String s) { StringBuilder sb = new StringBuilder(); StringTokenizer st = new StringTokenizer(s); List list = new ArrayList(); while(st.hasMoreTokens()) { list.add(Integer.valueOf(st.nextToken())); }//while end //리스트 정렬 Collections.sort(l.. 2022. 2. 21.
구명보트 - 프로그래머스 (Java, level 2) 처음 풀이 import java.util.Arrays; class Solution { public int solution(int[] people, int limit) { Arrays.sort(people); //짝의 수 int count = 0; //최대한 무게 차이가 많이 나는 사람끼리 짝해야 최소값 int index = people.length; //짝 지어진 (무거운)사람의 index //다음 cycle 때 index-1부터 탐색 for(int n=0; nn; i--) { if((people[n]+people[i]) 2022. 2. 18.