메모리: 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번 풀었지만, 매번 알고리즘이 생각나지 않았다.
해당 문제는 이후에 추가적으로 풀면서 조금 더 나은 풀이 방식이 있다면 추가 업로드를 할 예정이다.
이 글은 필자의 개인적인 의견이 담겨 있습니다.
이 글에 대해 공감하거나 다른 생각이 있으시면 댓글로 의견을 남겨주시면 감사하겠습니다.
그럼 개발자에 대한 저의 생각을 간략하게 말씀드리겠습니다.