개발놀이터
1-10. 가장 짧은 문자 거리 본문
package string.MinimumCharacterDistance110.my;
import java.util.Scanner;
public class Main {
/**
* -내풀이-
* 이건 진짜 아닌거 같아서 그냥 포기합니다. 시간만 오지게 잡아먹었네요...
*
* -선생님 풀이-
* 1. int 배열을 해당 문자 크기만큼 만들고
* 2. 배열 최대 크기보다 훨씬 큰 p 를 설정한 후에
* 3. 왼쪽에서 오른쪽으로 for 문을 돌면서 왼쪽 타겟까지의 거리를 잰다.
* t e a c h e r m o d e -> e (만약 맨 첫글자가 타겟이 아니면 p 타겟이면 0 으로 설정한다.)
* x 0 1 2 3 0 1 2 3 4 0 (x = p)
* 4. 다음엔 오른쪽에서 왼쪽으로 for 문을 돌리면서 오른쪽 타겟까지의 거리를 잰다. 이때 해당 값은 최소 값을 선택한다.
* t e a c h e r m o d e -> e
* 1 0 1 2 1 0 1 2 2 1 0
*
* int p = 1000;
* int[] answer = new int[str.length()];
* for (int i = 0 ; i < s.length() ; i++) {
* if (str.charAt(i) == t) {
* p = 0;
* answer[i] = p;
* }
* else {
* p++;
* answer[i] = p;
* }
* }
* p = 1000 // p 를 다시 초기화 해줘야한다. (중요!)
* for (int i = s.length() - 1 ; i >= 0 ; i--) {
* if (str.charAt(i) == t) {
* p = 0;
* }
* else {
* answer[i] = Math.min(answer[i], p); // Math 클래스의 min, max 알아두자자 * }
* }
*/
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String s = kb.next();
String t = kb.next();
System.out.println(solution(s, t));
}
private static String solution(String s, String t) {
s = s.toLowerCase();
t = t.toLowerCase();
String tmp = t + s + t;
String stack = "";
String[] split = tmp.split(t); // ex) study t -> tstudyt -> "", "s", "udy", ""
for (int i = 0 ; i < split.length ; i++) {
if (i == 0) {
int check = split[i].length();
for (int j = 0; j < split[i].length(); j++) {
stack += check;
stack += " ";
check--;
}
stack += "0 ";
}
else if (i == split.length - 1) {
int check = 0;
for (int j = 0; j < split[i].length(); j++) {
check++;
stack += check;
stack += " ";
}
}
else if (split[i].length() % 2 == 0) {
int check = 0;
for (int j = 0; j < split[i].length() / 2; j++) {
check++;
stack += check;
stack += " ";
}
stack += check;
stack += " ";
for (int j = 0; j < split[i].length() / 2; j++) {
check--;
stack += check;
stack += " ";
}
}
else {
int check = 0;
for (int j = 0; j < split[i].length() / 2; j++) {
check++;
stack += check;
stack += " ";
}
check++;
stack += check;
stack += " ";
for (int j = 0; j < split[i].length() / 2; j++) {
check--;
stack += check;
stack += " ";
}
stack += "0 ";
}
}
return stack;
}
}
package string.MinimumCharacterDistance110.teacher;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String str = kb.next();
char c = kb.next().charAt(0);
for (int x : solution(str, c)) {
System.out.print(x + " ");
}
}
private static int[] solution(String s, char t) {
int[] answer = new int[s.length()];
int p = 1000;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == t) {
p = 0;
answer[i] = p;
}
else {
p++;
answer[i] = p;
}
}
p = 1000;
for (int i = s.length() - 1; i >= 0; i--) {
if (s.charAt(i) == t) p = 0;
else {
p++;
answer[i] = Math.min(answer[i], p);
}
}
return answer;
}
}
'기타 > 코딩테스트' 카테고리의 다른 글
1-12. 2진 암호 (0) | 2023.02.09 |
---|---|
1-11. 문자열 압축 (0) | 2023.02.09 |
1-9. 숫자만 추출 (0) | 2023.02.09 |
1-8. 유효한 회문 문자열 (0) | 2023.02.09 |
1-7. 회문 문자열 (0) | 2023.02.09 |