Programmers
-
왜 항상 문제들은 막상 해결하고 나면 어렵지 않게 느껴지는지.. 잘 모르겠다 ㅎ 학생별 체육복 초기화 : 모든 학생에게 기본적으로 한 벌의 체육복을 할당한다. Map student = new HashMap(); for(int i = 0; i < n; i++) { student.put(i + 1, 1); } 체육복 도난 처리 : lost 배열을 순회하며 체육복을 잃어버린 학생의 체육복을 0으로 할당한다. for(int i = 0; i < lost.length; i++) { student.replace(lost[i], 0); } 여벌 체육복 처리 : reserve 배열을 순회하며 여벌의 체육복을 가진 학생의 체육복 수를 증가시킨다. 이 때 여벌의 체육복을 가진 학생이 체육복을 도난 당했다면 그 학생의 체육복..
프로그래머스 - 체육복왜 항상 문제들은 막상 해결하고 나면 어렵지 않게 느껴지는지.. 잘 모르겠다 ㅎ 학생별 체육복 초기화 : 모든 학생에게 기본적으로 한 벌의 체육복을 할당한다. Map student = new HashMap(); for(int i = 0; i < n; i++) { student.put(i + 1, 1); } 체육복 도난 처리 : lost 배열을 순회하며 체육복을 잃어버린 학생의 체육복을 0으로 할당한다. for(int i = 0; i < lost.length; i++) { student.replace(lost[i], 0); } 여벌 체육복 처리 : reserve 배열을 순회하며 여벌의 체육복을 가진 학생의 체육복 수를 증가시킨다. 이 때 여벌의 체육복을 가진 학생이 체육복을 도난 당했다면 그 학생의 체육복..
2024.04.23 -
이번 문제는 map의 getOrDefault()를 잘 활용하면 쉽게 풀 수 있는 문제였다. 참가자 배열 처리 : 먼저 모든 참가자의 이름을 map에 키값으로 저장한다. 이 때 이미 있는 참가자의 경우 값을 (등장횟수)를 1 증가시킨다. for(String runner : participant) { runners.put(runner, runners.getOrDefault(runner, 0) + 1); } 완주자 배열 처리 : 참가자 배열 처리와 마찬가지로 진행한다. for(String complete : completion) { completes.put(complete, completes.getOrDefault(complete, 0) + 1); } 미완주자 식별 : 참가자와 완주자를 처리해준 map에서 똑..
프로그래머스 - 완주하지 못한 선수이번 문제는 map의 getOrDefault()를 잘 활용하면 쉽게 풀 수 있는 문제였다. 참가자 배열 처리 : 먼저 모든 참가자의 이름을 map에 키값으로 저장한다. 이 때 이미 있는 참가자의 경우 값을 (등장횟수)를 1 증가시킨다. for(String runner : participant) { runners.put(runner, runners.getOrDefault(runner, 0) + 1); } 완주자 배열 처리 : 참가자 배열 처리와 마찬가지로 진행한다. for(String complete : completion) { completes.put(complete, completes.getOrDefault(complete, 0) + 1); } 미완주자 식별 : 참가자와 완주자를 처리해준 map에서 똑..
2024.04.23 -
음.. 이 문제는 그냥 하라는 대로 하니까 풀린 문제여서... 뭐 어려운 게 없었다..? class Solution { public int solution(String[][] board, int h, int w) { int answer = 0; int n = board.length; int[] dh = {0, 1, -1, 0}; int[] dw = {1, 0, 0, -1}; for(int i = 0; i = 0 && h + dh[i] = 0 && w + dw[i] < n) { if(board[h][w].equals(board[h + dh[i]][w + dw[i]])) answer++; } } return answer; } }
프로그래머스 - 이웃한 칸음.. 이 문제는 그냥 하라는 대로 하니까 풀린 문제여서... 뭐 어려운 게 없었다..? class Solution { public int solution(String[][] board, int h, int w) { int answer = 0; int n = board.length; int[] dh = {0, 1, -1, 0}; int[] dw = {1, 0, 0, -1}; for(int i = 0; i = 0 && h + dh[i] = 0 && w + dw[i] < n) { if(board[h][w].equals(board[h + dh[i]][w + dw[i]])) answer++; } } return answer; } }
2024.04.04 -
변수 준비 : 두 수 X와 Y에 나타나는 각 숫자에 대한 빈도를 저장할 빈 배열을 만든다. 이 배열은 크기가 10이며 이는 0부터 9까지 각각의 숫자들이 배열 X, Y에 몇 번 나타나는지 저장하기 위함이다. int[] x = new int[10]; int[] y = new int[10]; 숫자 빈도수 계산 : X,Y 배열을 순회하며 각 숫자의 빈도수를 증가시킨다. Character.getNumericValue() 메소드를 활용하여 각 문자를 숫자로 전환 후 해당 숫자 인덱스에 해당하는 배열의 요소값을 1씩 증가시킨다. for(int i = 0; i < X.length(); i++) { int index = Character.getNumericValue(X.charAt(i)); x[index]++; } f..
프로그래머스 - 숫자 짝꿍변수 준비 : 두 수 X와 Y에 나타나는 각 숫자에 대한 빈도를 저장할 빈 배열을 만든다. 이 배열은 크기가 10이며 이는 0부터 9까지 각각의 숫자들이 배열 X, Y에 몇 번 나타나는지 저장하기 위함이다. int[] x = new int[10]; int[] y = new int[10]; 숫자 빈도수 계산 : X,Y 배열을 순회하며 각 숫자의 빈도수를 증가시킨다. Character.getNumericValue() 메소드를 활용하여 각 문자를 숫자로 전환 후 해당 숫자 인덱스에 해당하는 배열의 요소값을 1씩 증가시킨다. for(int i = 0; i < X.length(); i++) { int index = Character.getNumericValue(X.charAt(i)); x[index]++; } f..
2024.04.04 -
초기설정 class Solution { public String solution(String s, String skip, int index) { String answer = ""; int first = 'a'; int last = 'z'; StringBuilder sb = new StringBuilder(); int[] pass = new int[skip.length()]; for(int i = 0; i < skip.length(); i++) { pass[i] = skip.charAt(i); } StringBuilder를 활용해서 효율적으로 문자열을 생성한다. first와 last는 'a'와 'z'를 아스키코드로 변환한 숫자이다. pass는 skip의 각 문자를 아스키코드로 변환하여 숫자로 만든 배열이다..
프로그래머스 - 둘만의 암호초기설정 class Solution { public String solution(String s, String skip, int index) { String answer = ""; int first = 'a'; int last = 'z'; StringBuilder sb = new StringBuilder(); int[] pass = new int[skip.length()]; for(int i = 0; i < skip.length(); i++) { pass[i] = skip.charAt(i); } StringBuilder를 활용해서 효율적으로 문자열을 생성한다. first와 last는 'a'와 'z'를 아스키코드로 변환한 숫자이다. pass는 skip의 각 문자를 아스키코드로 변환하여 숫자로 만든 배열이다..
2024.04.04 -
이 문제도 크게 어려움 없이 풀었다. 다만 거리계산을 할 때, 나는 피타고라스를 썼지만 이 문제는 맨해튼 거리 계산법을 사용했기에 그 부분을 살짝 헤맸지만 그걸 제외하고는 크게 어려운 부분은 없는 것 같다. 초기 설정 : 왼손과 오른손의 초기 위치는 각각 * 과 # 이다. 이를 좌표로 표현하면 [3, 0] , [3, 2] 이다. left = new int[]{3, 0}; right = new int[]{3, 2}; 입력 숫자 처리 : 주어진 숫자 배열 numbers를 순회하며 입력된 숫자에 따른 처리를 한다. 숫자 위치는 키패드를 2차원 배열 형태로 생각하면 될 것이고 [행, 열]로 표현된다. for(int i = 0; i < numbers.length; i++) { int number = numbers..
프로그래머스 - 키패드 누르기이 문제도 크게 어려움 없이 풀었다. 다만 거리계산을 할 때, 나는 피타고라스를 썼지만 이 문제는 맨해튼 거리 계산법을 사용했기에 그 부분을 살짝 헤맸지만 그걸 제외하고는 크게 어려운 부분은 없는 것 같다. 초기 설정 : 왼손과 오른손의 초기 위치는 각각 * 과 # 이다. 이를 좌표로 표현하면 [3, 0] , [3, 2] 이다. left = new int[]{3, 0}; right = new int[]{3, 2}; 입력 숫자 처리 : 주어진 숫자 배열 numbers를 순회하며 입력된 숫자에 따른 처리를 한다. 숫자 위치는 키패드를 2차원 배열 형태로 생각하면 될 것이고 [행, 열]로 표현된다. for(int i = 0; i < numbers.length; i++) { int number = numbers..
2024.04.01 -
이번 문제는 이렇게 푸는게 맞나..? 싶었던 문제였다. Map에 하나하나 담아줄 때 이렇게 하는게 맞나 싶었는데 다른 방법도 있겠지만 제일 먼저 생각난 방법이 이거였다. 변수 초기화 : 모든 성격 유형의 점수를 저장할 Map 객체를 만든 후, 각 성격 유형의 점수를 초기화한다. Map result = new HashMap(); result.put("R", 0); result.put("T", 0); result.put("C", 0); result.put("F", 0); result.put("J", 0); result.put("M", 0); result.put("A", 0); result.put("N", 0); 응답 처리 : survey 배열을 순회하면서 각 질문에 대한 사용자의 선택을 기반으로 점수를 계산..
프로그래머스 - 성격 유형 검사하기이번 문제는 이렇게 푸는게 맞나..? 싶었던 문제였다. Map에 하나하나 담아줄 때 이렇게 하는게 맞나 싶었는데 다른 방법도 있겠지만 제일 먼저 생각난 방법이 이거였다. 변수 초기화 : 모든 성격 유형의 점수를 저장할 Map 객체를 만든 후, 각 성격 유형의 점수를 초기화한다. Map result = new HashMap(); result.put("R", 0); result.put("T", 0); result.put("C", 0); result.put("F", 0); result.put("J", 0); result.put("M", 0); result.put("A", 0); result.put("N", 0); 응답 처리 : survey 배열을 순회하면서 각 질문에 대한 사용자의 선택을 기반으로 점수를 계산..
2024.04.01 -
이번 문제는 replaceAll() 메소드와 정규표현식을 사용하는 문제였다. 그리 어렵다고 느껴지는 문제는 아니었다. 전체 코드를 보자. class Solution { public String solution(String new_id) { new_id = new_id.toLowerCase(); new_id = new_id.replaceAll("[^\\w-_.]", ""); new_id = new_id.replaceAll("\\.+", "."); if(new_id.charAt(0) == '.') new_id = new_id.substring(1); if(new_id.length() != 0) { if(new_id.charAt(new_id.length() - 1) == '.') new_id = new_id...
프로그래머스 - 신규 아이디 추천이번 문제는 replaceAll() 메소드와 정규표현식을 사용하는 문제였다. 그리 어렵다고 느껴지는 문제는 아니었다. 전체 코드를 보자. class Solution { public String solution(String new_id) { new_id = new_id.toLowerCase(); new_id = new_id.replaceAll("[^\\w-_.]", ""); new_id = new_id.replaceAll("\\.+", "."); if(new_id.charAt(0) == '.') new_id = new_id.substring(1); if(new_id.length() != 0) { if(new_id.charAt(new_id.length() - 1) == '.') new_id = new_id...
2024.04.01