(참고사이트: https://developer-talk.tistory.com/690)
5번째 자리 '-'로 바꾸기
str = str.substring(0, 5) + '-' + str.substring(5+1);
(참고사이트: https://blog.naver.com/PostView.nhn?blogId=jysaa5&logNo=221831226674)
(char)97 = a
(int)a = 97
a~z : 97~122
A~Z : 65~90
범위를 벗어나면 일 -30 혹은 월 -12 이렇게 해줘야 하는 경우,
if 문이 아니라 while문으로 범위 안에 들어오게 해주기!
import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
HashMap<Character, Integer> hm = new HashMap<Character, Integer> ();
for(int i = 0; i < skip.length(); i++){
hm.put(skip.charAt(i), 1);
}
int p;
for(int i = 0; i < s.length(); i++){
p = 0;
for(int j = 0; j < index; j++){
p++;
if(s.charAt(i) + p > 122)
p -= 26;
if(hm.get((char)(s.charAt(i) + p)) == null)
continue;
else
p++;
}
s = s.substring(0, i) + (char)(s.charAt(i) + p) + s.substring(i + 1);
}
answer = s;
return answer;
}
}
악 틀렸다..
string은 아직 갈 길이 먼듯... 모르는것도 많고 인터넷의 도움 없이는 문법을 모르는 상태다.
여러번의 문제풀이를 통해 함수랑 문법 익히기
import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
HashMap<Character, Integer> skipHm = new HashMap <Character, Integer>();
HashMap<Character, Integer> alpha = new HashMap<Character, Integer>();
HashMap<Integer, Character> number = new HashMap<Integer, Character>();
for(int i = 0; i < skip.length(); i++){
skipHm.put(skip.charAt(i), 1);
}
int j = 1;
for(int i = 97; i < 123; i++){
if(skipHm.containsKey((char)i) == false){
alpha.put((char)i, j);
number.put(j, (char)i);
j++;
}
}
int newAlpha = 0;
for(int i = 0; i < s.length(); i++){
newAlpha = alpha.get(s.charAt(i)) + index;
if(newAlpha > alpha.size())
newAlpha -= alpha.size();
answer+= number.get(newAlpha);
}
return answer;
}
}
-> 이렇게 몇개만 틀렸다는 건 알고리즘은 맞으나 작은 실수가 있었다는 것
import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
HashMap<Character, Integer> skipHm = new HashMap <Character, Integer>();
HashMap<Character, Integer> alpha = new HashMap<Character, Integer>();
HashMap<Integer, Character> number = new HashMap<Integer, Character>();
for(int i = 0; i < skip.length(); i++){
skipHm.put(skip.charAt(i), 1);
}
//skip을 뺀 새로운 alpha, number 나열을 만들어줌
int j = 1;
for(int i = 97; i < 123; i++){
if(skipHm.containsKey((char)i) == false){
alpha.put((char)i, j);
number.put(j, (char)i);
j++;
}
}
//s 를 읽으면서 alpha와 number 해쉬맵을 이용하여 index만큼 더해주고 크기만큼 빼주기
int newAlpha = 0;
for(int i = 0; i < s.length(); i++){
newAlpha = alpha.get(s.charAt(i)) + index;
//if문이 아니라 while문으로 두번빼야 하는 경우를 해결함
while(newAlpha > alpha.size()){
newAlpha -= alpha.size();
}
answer+= number.get(newAlpha);
}
return answer;
}
}
-> 저번에 비슷한 실수 때문에 똑같이 틀렸던 적 있는데,
새로만든 alpha 길이가 만약 10인데, newAlpha는 23인거다. 그러면 alpha 길이를 한번만 빼주는게 아니라 두번 빼줘야 함
<그래서, if문이 아닌 while문으로 alpha 길이 안에 들어오게 맞춰줘야 한다.>