문제
한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.
출력
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.
예시 입력 1
teachermode e
예시 출력 1
1 0 1 2 1 0 1 2 2 1 0
해결
문자열s와 문자t를 입력받고 각문자와 문자s의 떨어진 거리를 구하는 문제이다.
여기서 주의할 점은 거리이기 때문에 각 문자보다 늦은 순서에 있는 문자s도 신경써야한다는 점이다.
int 배열을 하나 만들어주고 이 곳에 문자s와의 거리를 넣어줄 것이다.
거리를 넣는작업은 for문으로 넣어줄것이며, 총 2번 진행된다.
먼저,자신의 앞에있는 문자s와의 거리를 넣어주고 그다음은 자신의 뒤에있는 문자s와의 거리를 넣어준다.
code 에서는 p가 거리를 나타내고 있다.
맨 앞에 1001이라는 값이 들어가있는데 이것은 처음에 임의로 p값을 1000이라고 지정해서이다.
두번째 for문을 돌면서 없어지니 상관없다.
뒤에있는 문자s와의 거리를 넣어줄때는 원래 들어가있는 거리(자신의 앞에있는 문자s와의거리) 보다 가까울때만 넣어줘야된다!!
코드에서는 answer[i] =Math.min(answer[i],p); 를 이용해서 원래 들어가있는 값과 현재 값중 최솟값을 골라 넣어주었다.
그렇게해서 만들어진 int배열을 출력해주면 된다.
CODE
import java.util.*;
public class Main {
public static int[] solution(String str,Character ch){
int[] answer=new int[str.length()];
int p=1000;
for(int i=0; i<str.length(); i++){
if(str.charAt(i)==ch){
p=0;
answer[i] = p;
}
else{
p++;
answer[i]=p;
}
}
p=1000;
for(int i=str.length()-1; i>=0; i--){
if(str.charAt(i)==ch) p = 0;
else{
p++;
answer[i]=Math.min(answer[i],p);
}
}
return answer;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.next();
Character ch = in.next().charAt(0);
for(int x: solution(str,ch)){
System.out.print(x+" ");
}
}
}
결과
'문제 풀이 > 인프런' 카테고리의 다른 글
[JAVA11/알고리즘]2-5 소수찾기(에라토스테네스의 체) (1) | 2022.08.10 |
---|---|
[JAVA11/알고리즘]1-12 암호 (0) | 2022.08.08 |
[JAVA11/알고리즘]1-8 유효한 팰린드롬 (0) | 2022.08.04 |
[JAVA11/알고리즘]1-7 회문 문자열 (0) | 2022.08.02 |
[JAVA11/알고리즘]1-6 중복 문자 제거 (0) | 2022.08.02 |