-
프로그래머스 - 둘만의 암호알고리즘 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) 2023.09.26 프로그래머스 - 달리기 경주 (0) 2023.09.18 프로그래머스 - 문자열 나누기 (0) 2023.02.05 프로그래머스 - 크기가 작은 부분문자열 (0) 2023.01.24 프로그래머스 - 콜라 문제 (0) 2022.11.04