ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 둘만의 암호
    알고리즘 2023. 2. 26.
    반응형

     

    내 풀이

    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로 형변환을 해서 다음 영문자를 가져오는 모습

     

    반응형

    댓글 0

Designed by Hyeok