프로그래머스 둘만의 암호 자바
https://school.programmers.co.kr/learn/courses/30/lessons/155652
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해당 문제는 그리 어려운 문제는 아니였다. 하지만 한바퀴돌고 또 한바퀴를 돌 수 있는점 즉, 두바퀴까지도 가능하다는 점을 인지못하여 RuntimeException이 발생하였다.
실패코드를 봐보자..! 이를 인식했으면 더 빨리 풀었을텐데 아깝다.
해당 문제는 내가 멘토로 활동하고 있는 곳에서 많은 수강생분들이 프로그래머스를 풀고 있는거 같아 혹시 모르는 마음에 나도 풀고 있다.
class Solution {
public String solution(String s, String skip, int index) {
StringBuilder answer = new StringBuilder();
boolean []skipCheckArr = new boolean[26];
for(char c : skip.toCharArray()){
int skipIndex = c - 'a';
skipCheckArr[skipIndex] = true;
}
for(char c : s.toCharArray()){
int startIndex = c - 'a';
int alphaCount = 0;
int count =0;
int curIndex=0;
while(count<=index){
curIndex = startIndex + alphaCount;
if(curIndex>=26) curIndex-=26;
if(skipCheckArr[curIndex]) {
alphaCount++;
continue;
}
alphaCount++;
count++;
}
char ch = (char)(curIndex + 97);
answer.append(ch);
}
return answer.toString();
}
}
해당 코드에서 문제가 되었던 부분은 curIndex>=26이 넘는다면 -26을 빼주는 부분에서 해당 두바퀴를 고민하지 않아 3 번 , 17번, 18, 19번 케이스에서 탈락되었다.
import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
StringBuilder answer = new StringBuilder();
ArrayList<Character> arrayList = new ArrayList<>();
for(int i=0;i<26;i++){
arrayList.add((char)(i+97));
}
for(Character c : skip.toCharArray()) {
arrayList.remove(c);
}
for(Character c : arrayList){
System.out.print(c);
}
for(Character c : s.toCharArray()){
int targetIndex = arrayList.indexOf(c);
int num = (targetIndex + index) % arrayList.size();
answer.append(arrayList.get(num));
}
return answer.toString();
}
}
성공한 케이스의 코드이다. 가장 우선적으로 간단하게 길이가 얼만큼 삭제되어 배열이 들어올지 모르기 때문에 ArrayList를 통하여 값을 담아주었다. 그 후, add를 통하여 각각의 char값을 담아주었으며 여기서 remove를 통해서 값을 삭제해주었다.
for문을 통해서 값을 도는데 targetIndex에서 arrayList에 있는 해당 값을 index와 더해주었는데 아스키 코드 값인 int로 더해주어 문제가 발생하였었다. 이 후 잘생각해보니 삭제한 값은 들어오지 않는다는 것을 알게되어 targetIndex를 arrayList.indexOf에서 값을 찾아 index와 더해주어 size()로 나누어 주었다.
알고리즘 너무 재밌네.. 풀다보니깐 계속 풀게된다...