Dev/Algorithm

[프로그래머스] 둘만의 암호 - Java

VIPeveloper 2024. 5. 21. 14:38
728x90
반응형

문제

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

 

프로그래머스

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

programmers.co.kr

 

생각

  • 먼 지랄을 해도 안풀렸다.
  • 어떻게든 점수를 받기 위해 구차해진 내 코드를 첨부한다.

코드

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        System.out.println(solution("aukks", "wbqd", 5));
        System.out.println(solution("z", "abcdefghij", 20));    // n
    }
    public static String solution(String s, String skip, int index) {
        String answer = "";
        char [] arr = s.toCharArray();
        for (int i = 0; i < arr.length; i++) {
            char first_char = arr[i];
            ArrayList<Character> hubo = new ArrayList<>();
            for (int j = 1; j < 1000; j++) {
                int i1 = (int) first_char + j;
                if(i1>122) i1-=26;
                if(skip.contains(""+(char)i1)) continue;
                hubo.add((char)(i1));
            }
            answer += hubo.get(index-1);
        }

        return answer;
    }
}

다른 사람 풀이

  • 음.. 뭔가 쉽게 풀긴했는데,, j-- 를 한 이유를 모르겠다.
  • 디버깅을 해보니 알겠다. first_char 는 계속 a-z를 순회하면서 도는거고, j 가 20에 도달하지 않으면 계속 무한루프를 돈다고 생각하니 이해가 됐다.
public class Main {
    public static void main(String[] args) {
        System.out.println(solution("aukks", "wbqd", 5));
        System.out.println(solution("z", "abcdefghij", 20));    // n
    }
    public static String solution(String s, String skip, int index) {
        String answer = "";
        for (int i = 0; i < s.length(); i++) {
            char first_char = s.charAt(i);
            for (int j = 0; j < index; j++) {
                first_char+=1;
                if(first_char>'z') first_char -=26;
                if(skip.contains(String.valueOf(first_char))) j--;
            }
            answer += first_char;
        }
        return answer;
    }
}

 

  • 갈끔한 코드가 있어서 하나 더 첨부한다.
public class Main {
    public static void main(String[] args) {
//        System.out.println(solution("aukks", "wbqd", 5));
        System.out.println(solution("z", "abcdefghij", 20));    // n
    }
    public static String solution(String s, String skip, int index) {
        StringBuilder answer = new StringBuilder();

        for (char letter : s.toCharArray()) {
            char temp = letter;
            int idx = 0;
            while (idx < index) {
                temp = temp == 'z' ? 'a' : (char) (temp + 1);
                if (!skip.contains(String.valueOf(temp))) {
                    idx += 1;
                }
            }
            answer.append(temp);
        }

        return answer.toString();
    }
}
728x90
반응형