알고리즘

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

Heidong 2023. 2. 26. 15:20
반응형

 

내 풀이

public class P_47 {
	
	public String solution(String s, String skip, int index) {
		String answer = "";
		
		for(char x : s.toCharArray()) {
			for(int i=0; i<index; i++) {
				if(++x > 122) {
					x = 'a';
				}
				if(skip.contains(x+"")) {
					i--;
				}
			}
			answer += x;
		}
		
		return answer;
    }

	public static void main(String[] args) {
		// 둘만의 암호
		
		P_47 p = new P_47();
		String s = "aukks";
		String skip = "wbqd";
		int index = 5;
		
		System.out.println(p.solution(s, skip, index));

	}

}

s의 문자열 전체를 돌고 index만큼 뒤로 돌리면서 skip할 문자열을 찾아야하니 반복문은 2개로
영문자는 아스키 코드로 97 ~ 122임 그래서 문자열 s의 다음 문자가 122를 넘어가게 되면 다시 97인 a로 돌아가게한다.
그리고 스킵할 문자가 포함되어 있다면 반복문 횟수를 1회 더 늘린다.
문자열에 "" 공백을 더하는 이유는 contains함수를 사용하기 위해 String 형태로 변환 한것이다.

 

다른 사람 풀이

class Solution {
    public 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();
    }
}

같은 방식의 로직이지만 삼항연산자 안에서 index만큼 뒤로 넘긴 방법이다.

temp가 z라면 a로 바꾸고 그게 아니면 temp에 1을 더해 char로 형변환을 해서 다음 영문자를 가져오는 모습

 

반응형