현재

10. 가장 짧은 문자거리 본문

알고리즘/기타알고리즘문제

10. 가장 짧은 문자거리

AAAge 2024. 4. 8. 21:51
설명

첫번째문자열과 두번째 문자열의 최단거리를 구하시오

예시 입력 1 

teachermode e

예시 출력 1

1 0 1 2 1 0 1 2 2 1 0

 

<힌트>

더보기
  • Math.min(a,b)
  • 초기값에 주의하여야 한다.

 

<풀이코드>

더보기
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{
        Scanner sc = new Scanner(System.in);
        char inputList[] = sc.next().toCharArray();
        char cha = sc.next().charAt(0);

        int leftList[] = new int[inputList.length];
        int leftCnt = 100;
       
        int rightList [] = new int[inputList.length];
        int rightCnt = 100;

        for(int i = 0; i < inputList.length ; i++){
            if(inputList[i] == cha){
                leftCnt = 0;
            } else {
                leftCnt++;
            }
            leftList[i] = leftCnt;
        }
        for(int i = inputList.length-1; i >= 0 ; i--){
            if(inputList[i] == cha){
                rightCnt = 0;
            } else {
                rightCnt++;
            }
            rightList[i] = rightCnt;
        }
        int answerList[] = new int[inputList.length];
        for(int i = 0; i < inputList.length ; i++){
            answerList[i] = Math.min(rightList[i], leftList[i]);            
        }
        for(int e : answerList){
            System.out.print(e + " ");
        }
        //teachermode e

        sc.close();
    }
}

 

<정답코드>

더보기
import java.util.*;
class Main {    
    public 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;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str=kb.next();
        char c=kb.next().charAt(0);
        for(int x : T.solution(str, c)){
            System.out.print(x+" ");
        }
    }
}

'알고리즘 > 기타알고리즘문제' 카테고리의 다른 글

12. 암호  (0) 2024.04.09
11. 문자열 압축  (0) 2024.04.08
8. 유효한 팰린드롬  (0) 2024.04.03
7. 회문 문자열  (0) 2024.04.03
6. 중복문자제거(indexOf())  (0) 2024.04.03