[Programmers] Lv1 둘만의 암호 Java

2023. 2. 3. 17:19CS/자료구조 & 알고리즘

728x90

문제 출처

[프로그래머스 코딩 테스트 연습]

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

 

프로그래머스

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

programmers.co.kr

 

 

문제 풀이

 

한 단어를 1번 넘기는 법

char 변수는 ASSCI 코드로 표현이 가능하다.

ASSCI 코드는 간단하게 설명하면 숫자를 이용하여 문자를 표현하는 방법 중 하나이다.

ASCCI 코드를 이용하여 문자에 1을 더하면 ASSCI 코드 상에서 1을 더한 값이 된다.

→ ‘a’ + 1 = ‘b’가 된다.

또한 숫자간에 비교를 통하여 문자의 순서도 비교가 가능하다.

위를 이용하여 ++c > ‘z’가 성립하게 된다.

++c > ‘z’ 가 만족하면 ‘a’로 변하게 하고 아니면 미리 더한 c를 반환하는 것으로 한 단어를 1번 넘길 수 있다.

 public char addChar(char c) {
        return (++c > 'z') ? 'a' : c;
 }

 

skip 건너 뛰기

문제에서 skip에 해당하는 것은 넘긴다고 했으므로 skip.contains(String.valueof(c))를 이용하여 문자가 skip에 포함되는지 확인이 가능하다.

skip에 포함되면 while을 이용하여 지속적으로 더하면 된다.

c = addChar(c);
while (skip.contains(String.valueOf(c)))
    c = addChar(c);

 

둘만의 암호 풀기

단어를 추가할 String을 먼저 만든다.

이때 문자열이 빈번하게 추가될 것으로 예상함으로 StringBuilder을 이용한다.

이후 s 문자열에서 각각의 char 즉 단어 1개씩 가져와서 index번을 위에 있는 코드를 이용하여 문자를 skip은 건너뛰면서 넘기면 된다.

 

소스 코드

public class Solution {

    public char addChar(char c) {
        return (++c > 'z') ? 'a' : c;
    }

    public String solution(String s, String skip, int index) {
        StringBuilder result = new StringBuilder();

        for (char c : s.toCharArray()) {
            for (int i = 0; i < index; i++) {
                c = addChar(c);
                while (skip.contains(String.valueOf(c)))
                    c = addChar(c);
            }
            result.append(c);
        }

        return result.toString();
    }
}
728x90