인프런의 자바(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 |