알고리즘 공부/백준 문제풀이

[백준] 9086 : 문자열 -JAVA

송테이토 2022. 9. 1. 11:57

 

[백준] 9086 : 문자열 -JAVA

문자열

문제

문자열을 입력으로 주면 문자열의 첫 글자와 마지막 글자를 출력하는 프로그램을 작성하시오.

입력

입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으며 문자열의 길이는 1000보다 작다.

출력

각 테스트 케이스에 대해서 주어진 문자열의 첫 글자와 마지막 글자를 연속하여 출력한다.

예제 입력 1

3
ACDKJFOWIEGHE
O
AB

예제 출력 1

AE
OO
AB



 

방법은 두가지로 풀었다.

  1. substring으로 문자열을 쪼개어서 푼다.
  2. input.charAt(0)를 통해 0번째를 char타입으로 변환해서

방법1. substring()

import java.util.Scanner;

public class B9086 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		// 테스트 케이스의 개수 선언
		int T = sc.nextInt();

		String[] arr = new String[T];

		// 문자열 입력받기
		for (int i = 0; i < arr.length; i++) {
			arr[i] = sc.next();
		}
		sc.close();

		// 입력받은 문자열을substring으로 0번째 끝번째를 출력한다.
		for (int i = 0; i < arr.length; i++) {

			// 만약 입력받은 문자열의 길이가 1자리면 앞 뒤 둘 다 출력
			if (arr[i].length() < 1) {
				System.out.println(arr[i] + "" + arr[i]);
			} else {
				System.out.print(arr[i].substring(0, 1)); // 0번째 1번째 출력
				System.out.println((arr[i].substring(arr[i].length() - 1, arr[i].length())));// 끝에서 -1번째부터 끝번째까지
			}

		}
	}

}

substring(시작번호, 끝번호) 문자열을 나눠주는 메서드다.

	String s = "ACDKJFOWIEGHE";
	System.out.println(s.substring(0, 1));
	System.out.println(s.substring(s.length() - 1, s.length()));

→ AE



방법2.

import java.util.Scanner;

public class B9086 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		// 테스트 케이스의 개수 선언
		int T = sc.nextInt();

		for (int i = 0; i < T; i++) {
			String input = sc.next();

			//String.valueOf() input.charAt(0)인 char타입을 String 데이터로 형변환
			// input이 가리키고 있는 문자열에서 0번째에 있는 문자를 char타입으로 변환
			String first = String.valueOf(input.charAt(0));
			String end = String.valueOf(input.charAt(input.length() - 1));
			System.out.println(first + end);
		}
		sc.close();
	}
}

parseInt(): 원시데이터인 int 타입을 반환

→parseInt() 메서드는 결과값을 항상 int 형으로 리턴합니다. 이 때 반환되는 반호나되는 값은 객체가 아닌 기본 자료형(Primitive Type)입니다.

valueOf(): Integer 래퍼(wrapper)객체를 반환

→문자열의 값을 정수형으로 변환한 다음 Integer 객체로 만들어서 반환합니다. 즉 new Integer(Integer.parseInt(s)) 값이 리턴됩니다.

Java 1.5 에서 Autoboxing and Unboxing in Java 가 도입된 이후로 차이는 거의 없을 거라고 관련자료에서 말하고 있다.

사실 Java 1.5에서 도입된 'Autoboxing and Unboxing'  덕에 서로 뭘써도 상관이 없습니다. Integer 객체로 리턴을 받아서 int 변수에 할당하면 자동으로 형변환이 일어나기 때문입니다. 대신 내부적으로 객체 생성 오버헤드가 있을 수 있습니다.


charAt()

이 녀석은 String으로 저장된 문자열 중에서 한 글자만 선택해서

char타입으로 변환해주는 녀석