오늘보다 더 나은 내일의 나에게_

자바 알고리즘 문제 풀이 String Q10_가장 짧은 문자거리 본문

ALGORITHM/inflearn_javaAlgorithm

자바 알고리즘 문제 풀이 String Q10_가장 짧은 문자거리

chan_96 2022. 2. 3. 22:17
728x90
설명

한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.


입력

첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.

문자열의 길이는 100을 넘지 않는다.


출력

첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.

 


예시 입력1


예시 출력

teachermode e 1 0 1 2 1 0 1 2 2 1 0

 

코드

내가 입력한 코드

더보기

미완성

package String;

import java.util.Scanner;
import java.util.StringTokenizer;

public class Q10 {
	public String solution(String str) {
		String answer = "";
		StringTokenizer st = new StringTokenizer(str);
		String s = st.nextToken();
		char[] c = s.toCharArray();
		char t = st.nextToken().charAt(0);
		
		for (int i = 0; i < c.length; i++) {
			if(c[i] == t) {
				c[i] = 48;
				int num = 48;
				
				for (int j = i-1; j >= 0; j--) {
					if(c[j]==48) {
						break;
					}else {
						num++;
						c[j] = (char)num;
					}
				}// end of 2for
			}// end of if
		} //end of for
		
		for (int i = 0; i < c.length; i++) {
			if(c[i] == 48) {
				int num = 48;
				
				for (int j = i+1; j < c.length; j++) {
					if(c[j]==48) {
						break;
					}else if(c[j]>num){
						num++;
						c[j] = (char)num;
					}
				}// end of 2for
			}// end of if
		} //end of for
		
		
		answer = String.copyValueOf(c);
		for (int i = 0; i < answer.length()-1; i++) {
			answer.charAt(i);
		}
		return answer;
	}
	
	public static void main(String[] args) {
		Q10 T = new Q10();
		Scanner kb = new Scanner(System.in);
		String str = kb.nextLine();
		System.out.println(T.solution(str));
		
	}
}

해설 코드

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+" ");
		}
	}
}

 

 

풀이 및 정리 

=> Math.min( ) 두개의 매개변수를 가지며 두 값을 비교해 더 작은 값을 반환
728x90
Comments