메모리: 73.4 MB, 시간: 0.04 ms
코딩테스트 연습 > 2021 Dev-Matching:웹 백엔드 개발자(상반기)
import java.util.*;
public class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = new int[2];
Map<Integer, Integer> compareRank = init();
int zero_count = 0, same_number = 0;
for (int i = 0; i < 6; i++) {
if (lottos[i] == 0) {
zero_count += 1;
continue;
}
for (int j = 0; j < 6; j++) {
if (lottos[i] == win_nums[j]) {
same_number += 1;
break;
}
}
}
answer[0] = compareRank.get(same_number + zero_count);
answer[1] = compareRank.get(same_number);
return answer;
}
private Map<Integer, Integer> init() {
Map<Integer, Integer> ret = new HashMap<>();
int rank = 6;
for (int i = 0; i <= 6; i++) {
if (i == 0 || i == 1) {
ret.put(i, rank);
continue;
}
rank -= 1;
ret.put(i, rank);
}
return ret;
}
}
메모리: 74.3 MB, 시간: 0.27 ms
코딩테스트 연습 > 2022 KAKAO BLIND RECRUITMENT
class Solution {
public String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
int left = 10;
int right = 12;
for (int i = 0; i < numbers.length; i++) {
int n = numbers[i];
if (n == 1 || n == 4 || n == 7) {
left = n;
sb.append("L");
}
if (n == 3 || n == 6 || n == 9) {
right = n;
sb.append("R");
}
if (n == 2 || n == 5 || n == 8 || n == 0) {
if( n == 0 ) n = 11;
int leftDiff = (Math.abs(n - left) / 3) + (Math.abs(n - left) % 3);
int rightDiff =(Math.abs(n - right) / 3) + (Math.abs(n - right) % 3);
if (leftDiff == rightDiff) {
if (hand.equals("right")) {
right = n;
sb.append("R");
}else{
left = n;
sb.append("L");
}
} else if (leftDiff > rightDiff) {
right = n;
sb.append("R");
} else {
left = n;
sb.append("L");
}
}
}
return sb.toString();
}
}
StringBuilder() 클래스와 Math 클래스에 대해 다시금 개념을 복습하게 핸 문제였다.
다음 복습에는 조금 더 효율적이면서 깔끔한 코드를 만드는 것을 목표로 하자.
메모리: 77.8 MB, 시간: 0.43 ms
코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT
class Solution {
public int solution(String dartResult) {
int answer = 0;
String[] dart = dartResult.split("");
int[] score = new int[3]; // 점수
int index = -1; // score index
for(int i=0; i<dart.length; i++) {
// 숫자인지 확인
if(dart[i].matches("[0-9]")) {
index++;
score[index] = Integer.parseInt(dart[i]);
// 두자리 수 숫자?
if(dart[i+1].matches("[0-9]")) {
score[index] *= 10;
i++;
}
}
switch(dart[i]) {
case "D":
score[index] = (int)Math.pow(score[index], 2);
break;
case "T" :
score[index] = (int)Math.pow(score[index], 3);
break;
case "*" :
score[index] *= 2;
if(index - 1 >= 0) score[index-1] *= 2;
break;
case "#" :
score[index] *= -1;
}
}
for(int s : score) {
answer += s;
}
return answer;
}
}
배열로 변환해서 조건에 따라 if문과 switch-case문을 활용했다.
정규 표현식 방법과 switch-case문에 대한 이해만 알면 풀 수 있는 문제였다.
메모리: 77.5 MB, 시간: 0.58 ms
코딩테스트 연습 > 2022 KAKAO TECH INTERNSHIP
import java.util.*;
class Solution {
private Map<Character, Integer> typeMap = new HashMap();
public String solution(String[] survey, int[] choices) {
StringBuilder sb = new StringBuilder();
int[] score = {0, 3, 2, 1, 0, 1, 2, 3};
char[] types = {'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'};
for (int i=0; i<types.length; i++)
typeMap.put(types[i], 0);
for (int i = 0; i < survey.length; i++) {
int pos = 0;
if (choices[i] >= 5) pos = 1;
typeMap.put(survey[i].charAt(pos), typeMap.get(survey[i].charAt(pos))+score[choices[i]]);
}
for (int i=0; i<types.length; i+=2) {
if (typeMap.get(types[i]) >= typeMap.get(types[i+1]))
sb.append(types[i]);
else
sb.append(types[i+1]);
}
return sb.toString();
}
}
2번 풀었지만, 매번 알고리즘이 생각나지 않았다.
해당 문제는 이후에 추가적으로 풀면서 조금 더 나은 풀이 방식이 있다면 추가 업로드를 할 예정이다.
이 글은 필자의 개인적인 의견이 담겨 있습니다.
이 글에 대해 공감하거나 다른 생각이 있으시면 댓글로 의견을 남겨주시면 감사하겠습니다.
그럼 개발자에 대한 저의 생각을 간략하게 말씀드리겠습니다.