몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 1] 둘만의 암호 {언어 : Java} 본문

개발 언어 입문/Java 입문

프로그래머스 [Lv. 1] 둘만의 암호 {언어 : Java}

스위태니 2024. 5. 23. 17:18

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/155652#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드

import java.util.*;

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        int lenS = s.length();
        int lenSkip = skip.length();
        
        Map<Character, Boolean> skipDict = new HashMap<>();
        for (int j = 0; j < lenSkip; j++) {
            char tmp = skip.charAt(j);
            if (skipDict.containsKey(tmp)) {
                continue;
            } else {
                skipDict.put(tmp, true);
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < lenS; i++) {
            char currentAlpha = s.charAt(i);
            int asciiNum = (int) currentAlpha;
            int count = 0;
            while (count < index) {
                if (asciiNum + 1 > 122) {
                    asciiNum = 97;
                } else {
                    asciiNum++;
                }
                currentAlpha = (char) asciiNum;
                if (!skipDict.containsKey(currentAlpha)) {
                    count++;                    
                }
            }
            sb.append(currentAlpha);
        }
        
        answer = sb.toString();
        return answer;
    }
}

풀이 방법

  • asciiNum을 1씩 증가하면서 skip에 해당하면 count를 세지 않는다.
  • 여기서 while을 사용하는 이유는 pMonth가 12를 초과할 때마다 월을 조정하여 올바른 연도와 월을 계산하기 위함이다. 만약 pMonth가 24 이상인 경우 한 번의 if 조건으로는 올바르게 처리할 수 없기 때문이다.

느낀점

  • java에 익숙해질 때까지 풀어보자.