3일차 알고리즘..

쿠우·2022년 7월 17일

설명
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.

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

출력
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.

import java.util.ArrayList;
import java.util.Scanner;

public class Main {


	public static void solution(String input) {

		char[] result = input.toCharArray();
		ArrayList<Integer> units = new ArrayList<>();//map으로 해볼까...
		for(int count =0; count < input.length(); count++) {
			if((65<=result[count] && result[count] <=90) || ( 97<= result[count] && result[count]  <=122)) {
				 units.add(count);
			} // if
		} //for 
		
		int size = units.size()-1;
		for(int count=0; count < units.size()/2 ; count ++) {
			char tmp;
			tmp = result[units.get(count)];
			result[units.get(count)] = result[units.get(size)];
			result[units.get(size)]= tmp;
			size--;
				
		}// for
		
		System.out.println(result);

		
	} // solution
	public static void main(String[] args) {

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

  1. 입력 받고
  2. 특수문자는 거르고 영어만 뒤집는다.
    -> 특수문자의 위치를 구별할 줄 알아야 한다. 아스키 코드로 구별
    -> 영어의 위치도 알아야한다.
    -> 위치를 저장하고 해당 위치에 맞게끔 교환해준다.
  3. 출력

깨달은 점: Character.isAlphabetic() 알파벳인지 아닌지 구분하는 메소드..
if else를 통해서 좌값과 우값에 대해 특수문자인지를 판별해서 아니면 한칸씩 옆으로 가게 만든다. 둘다 아니라면 교환해주고 lt와 rt의 인덱스가 교차되는 시점에 반복문 중단한다..
고집부려서 오래동안 고민해가지구 푼 것인데 너무 간단하게 그리고 잡다하지 않게 되어있는 답지 보고 혼이 나갔다. 학창시절부터 못푸는 문제 붙잡고 머리 쥐어뜯는거 좋아하던지라.. 재미는 있다.



import java.util.ArrayList;
import java.util.Scanner;

public class Main {


	public static void solution(String input ,char chInput) {
		
		String chElement = String.valueOf(chInput);
		
		while(true){
			
			if((input.contains(chElement)) || input.contains(chElement.toUpperCase())) {
				 int index = input.toLowerCase().indexOf(chInput);
				StringBuffer bf = new StringBuffer(input);
				bf.deleteCharAt(index);
				input = bf.toString();
			} else {
				System.out.println(input);
				break;
			}
		
		}// while

		
		
	} // solution
	
	
	public static void main(String[] args) {

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

문제를 잘못 읽어서 다르게 풀었다. 나는 입력받은 문자열 중에 두번째 입력받은 문자를 제거하는 식을 내버렸네..

profile
일단 흐자

0개의 댓글