5일차 알고리즘 문자열 마지막

쿠우·2022년 7월 22일
0

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

입력
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.

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

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void solution(String input , char inputch) {

		int[] intArr = new int[input.length()] ;
		


		int j = 1;
		for(int i = input.length()-1; i >= 0; i-- ) {
			if(input.charAt(i) == inputch) {
				j=0;
				intArr[i] = j;
				j++;
			} else {
				intArr[i] = j;
				j++;
			} // if - else

		}// for

		j=1;
		for(int i=0; i< input.length(); i++) {
			if(input.charAt(i) == inputch) {
				j=0;
				intArr[i] = j;
				System.out.print(intArr[i]+" ");
				j++;
			} else if(intArr[i] >= j){
				intArr[i] = j;
				System.out.print(intArr[i]+" ");
				j++;
			} 
			System.out.print(intArr[i]+" "); 
		}// for
	} // solution
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		char input2 = sc.next().charAt(0);
		solution(input, input2);
		
	} // main
}// end class

알고리즘
1.입력받는다.
2. 입력받은 숫자는 0으로 초기화하고 뒤로 가면서 숫자를 더한다.
3. 다시 반대반향 앞으로 가면서 숫자를 비교하고 낮은 숫자를 넣는다.
4.출력


설명
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오.
단 반복횟수가 1인 경우 생략합니다.

입력
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.

출력
첫 줄에 압축된 문자열을 출력한다.


import java.util.Scanner;

public class Main {
	public static void solution(String input) {
		
		int count = 2;
		int index = 0;
		StringBuffer bf = new StringBuffer(input);
		
		while(true) {
			
			if(bf.length() <=  index+1) 
				break;
			
			if(bf.charAt(index) == bf.charAt(index+1) ) {
				bf = bf.replace(index+1, index+2, String.valueOf(count));
				count++;
				index++;
				
			} else if(Character.isDigit(bf.charAt(index)) && 
					bf.charAt(index+1) == bf.charAt(index-1)){
				bf = bf.replace(index+1, index+2, String.valueOf(count));
				count++;
				bf = bf.delete(index, index+1);
				
			} else{ 
				count = 2;
				index++;
			} // if
			
		}//while 
		
		System.out.println(bf.toString());
		
	} // solution
	
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine().toUpperCase();
		solution(input);
	} // main
}// end class

알고리즘

알파벳 대문자 입력 받는다
계속 반복한다
인덱스 변수+1보다 작으면 종료
같은 문자를 만나면 뒤에 것이 2부터 시작된 숫자로 변한다
아닐 경우 숫자인지 체크하고 반복된 문자하고 같은지를 확인 후
반복되는 문자일경우 숫자 count로 변경해주고 앞선 숫자는 지워버린다.


설명
현수는 영희에게 알파벳 대문자로 구성된 비밀편지를 매일 컴퓨터를 이용해 보냅니다.
비밀편지는 현수와 영희가 서로 약속한 암호로 구성되어 있습니다.
비밀편지는 알파벳 한 문자마다 # 또는 *이 일곱 개로 구성되어 있습니다.
만약 현수가 “#*#”으로 구성된 문자를 보냈다면 영희는 현수와 약속한 규칙대로 다음과 같이 해석합니다.
1. “#*#”를 일곱자리의 이진수로 바꿉니다. #은 이진수의 1로, *이진수의 0으로 변환합니다. 결과는 “1000001”로 변환됩니다.
2. 바뀐 2진수를 10진수화 합니다. “1000001”을 10진수화 하면 65가 됩니다.
3. 아스키 번호가 65문자로 변환합니다. 즉 아스크번호 65는 대문자 'A'입니다.
참고로 대문자들의 아스키 번호는 'A'는 65번, ‘B'는 66번, ’C'는 67번 등 차례대로 1씩 증가하여 ‘Z'는 90번입니다.
현수가 4개의 문자를 다음과 같이 신호로 보냈다면
#**###############
이 신호를 4개의 문자신호로 구분하면
#**
## --> 'C'
##### --> 'O'
#
#### --> 'O'
### --> 'L'
최종적으로 “COOL"로 해석됩니다.
현수가 보낸 신호를 해석해주는 프로그램을 작성해서 영희를 도와주세요.

입력
첫 줄에는 보낸 문자의 개수(10을 넘지 안습니다)가 입력된다. 다음 줄에는 문자의 개수의 일곱 배 만큼의 #또는 * 신호가 입력됩니다.
현수는 항상 대문자로 해석할 수 있는 신호를 보낸다고 가정합니다.

출력
영희가 해석한 문자열을 출력합니다.

package tttt;

import java.util.Scanner;

public class Main {
	public static void solution(String input, int count) {
		
		StringBuffer bf = new StringBuffer();
		for(char ch: input.toCharArray()) {
			
			int binary = (ch == '*'? 0:1);
			
			bf = bf.append(binary);
		}//for
		
		for(int i=1; i<=count;i++) {
			
			int decimal = Integer.valueOf(bf.substring(0+((i-1)*7), 7+((i-1)*7)), 2);
			System.out.print((char)decimal);
			
		}//for
	
	} // solution
	
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		String count = sc.nextLine();
		while(Integer.valueOf(count) >10) {count = sc.nextLine();};
		
		String input = sc.nextLine();
		
		solution(input,Integer.valueOf(count));
	} // main
}// end class

알고리즘

#= 1 * =0 을 의미 ->1. 문자를 해당 숫자로 변환 comparTo 절대값 = math.abs
7자리 수로 구성된 이진수 문자 -> 2. 7자리로 끊어야한다. subString 이용
2진수를 10 진수화 -> 3. 10진수로 바꾼다. Integer.valueOf(string, 2);
4. 문자를 대문자로 바꿔서 출력

profile
일단 흐자

0개의 댓글