본문 바로가기
Computer Science/Algorithm

[Inflearn] 가장 짧은 문자거리

by 코딩맛 2022. 11. 12.

인프런의 자바(Java)알고리즘 문제풀이 입문:코딩테스트 대비 강좌의 강의를 보고 문제 해설을 작성해보았습니다.

 

섹션1. String(문자열)의 10. 가장 짧은 문자거리 강의편 입니다.

 

설명

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

 

입력

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

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

 

출력

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

 

import java.util.Scanner;

public class 가장_짧은_문자거리 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		char c = sc.next().charAt(0);
		
		solution(str, c);

	}
	
	public static void solution(String str, char c){
		int[] ans = new int[str.length()];
		int p = 1000;
		for(int i =0; i<str.length(); i++) {
			if(str.charAt(i) == c) {
				p=0;
				ans[i]=p;
			}
			else {
				p++;
				ans[i]=p;
			}
		}
		p = 1000;
		for(int i = str.length()-1; i>=0; i--) {
			if(str.charAt(i) == c) {
				p=0;
			}
			else {
				p++;
				ans[i]=Math.min(ans[i], p);
			}
		}
		
		for(int a : ans) {
			System.out.print(a+" ");
		}
	}
}

>> 해설

Scanner 객체를 통해 문자열 str과 문자 c를 입력받고 두개의 값을 매개변수로 담아 solution메소드를 호출시킵니다.

문자열의 각 문자를 문자c와 비교해서 거리 값을 저장시킬 문자열 크기의 정수형 배열 ans를 생성합니다.

 

첫 번째로 문자열 앞에서부터 문자 c와의 값이 같으면 거리가 0이므로 0으로 값을 세팅하고 0이 아니면 p값을 늘립니다. 

두 번째로 문자열 뒤에서부터 문자 c와의 값이 같으면 거리가 0이므로 0으로 값을 세팅하고 0이 아니면 p값을 늘리는데 거리 값이 들어 있는 배열 ans의 숫자와  현재 거리가 담긴 p중에서 더 작은 값을 배열에 저장합니다.

 

그리고 최종적으로 배열 ans를 출력하며 프로그래밍을 종료합니다.

'Computer Science > Algorithm' 카테고리의 다른 글

[Inflearn] 암호  (0) 2022.11.13
[Inflearn] 문자열 압축  (0) 2022.11.13
[Inflearn] 숫자만 추출  (0) 2022.11.05
[Inflearn] 팰린드롬  (0) 2022.11.05
[Inflearn] 회문 문자열  (0) 2022.11.04