문자열 - 9086번 (Java 풀이)
문제
문자열을 입력으로 주면 문자열의 첫 글자와 마지막 글자를 출력하는 프로그램을 작성하시오.
입력
입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으며 문자열의 길이는 1000보다 작다.
출력
각 테스트 케이스에 대해서 주어진 문자열의 첫 글자와 마지막 글자를 연속하여 출력한다.
예제 입력 1
3
ACDKJFOWIEGHE
O
AB
예제 출력 1
AE
OO
AB
나는 이 문제를 처음 봤을 때, 이 문제 역시 char형 배열을 활용해 인덱스 0번쨰 문자와 배열 길이번째의 인덱스가 가지고 있는 문자를 출력하면 쉽게 풀릴 것 같다는 생각이 들어 해당 방법으로 풀이를 진행하였다.
풀이1 - String 배열과 char배열 활용
package BAEKJOON_9086;
/*
날짜 : 2024.07.15.월
내용 : 백준 9086번 문제 (문자열)
*/
import java.util.*;
public class BAEKJOON_9086 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 문자열을 몇번 입력받을지 세팅하는 변수 선언
int strLength = 0; // 문자열의 길이를 저장할 변수 선언
for(int i=0; i<n; i++) {
String str = sc.nextLine(); // n번 만큼 문자열을 입력받기
char[] strArray = str.toCharArray(); // 입력받은 문자열을 cahr형 배열로 형변환
if (str.isEmpty()) { // 문자열이 비어있는 경우나는 에러 예외처리
i--; // 빈 문자열을 입력받았을 때 전체 반복문 도는 횟수 줄어드는거 방지
continue;
}
for(int j=0; j < strArray.length; j++) { // 문자열의 마지막 문자의 인덱스를 알아내기위해 for문을 활용하여 배열의 길이 구하기
strLength++;
}
System.out.printf("%c%c",strArray[0], strArray[strLength-1]); // 길이가7이면 strArray[6]이 제일 마지막이므로 strArray[strLength-1]로 마지막 문자 출력
System.out.println();
strLength = 0; // 문자열 구하는 카운팅 다시 0으로 초기화
}
}
}
위와 같이 코드를 짰을 때 하나씩 입력했을 때는 제대로 출력되지만 문자열 3개를 한꺼번에 입력했을 때는 출력형식이 다르게 나와 에러가 나게 되었다.
아마 편의상 한개의 for문에 모두 처리하게 하려 것이 문제인 것 같다. 이를 해결하기 위해 입력을 먼저 받고 한꺼번에 로직을 처리하게 하기위해 입력받는 for문을 따로 만들어 String배열에 해당 문자열들을 입력받아 두고 아래 for문에서 해당 문자열들을 하나씩 출력하며 처음 문자열과 마지막 문자열들을 하나씩 출력하는 로직을 구현해보았다.
package BAEKJOON_9086;
/*
날짜 : 2024.07.15.월
내용 : 백준 9086번 문제 (문자열)
*/
import java.util.*;
public class BAEKJOON_9086 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 문자열을 몇번 입력받을지 세팅하는 변수 선언
int strLength = 0; // 문자열의 길이를 저장할 변수 선언
String[] stringArray = new String[n];
char[] strArray = new char[n];
sc.nextLine(); // \n 개행문자 제거
for (int i=0; i<n; i++) { // string배열에 입력받은 str들을 담아두기
String str = sc.nextLine(); // n번 만큼 문자열을 입력받기
stringArray[i] = str;
}
for(int i=0; i<n; i++) { // stringArray에서 저장해도 str들을 하나씩 불러와 각각 처음과 끝의 문자열 출력
strArray = stringArray[i].toCharArray(); // 입력받은 문자열을 cahr형 배열로 형변환
for(int j=0; j < strArray.length; j++) { // 문자열의 마지막 문자의 인덱스를 알아내기위해 for문을 활용하여 배열의 길이 구하기
strLength++;
}
if (strArray.length > 0) {
System.out.printf("%c%c",strArray[0], strArray[strLength-1]); // 길이가7이면 strArray[6]이 제일 마지막이므로 strArray[strLength-1]로 마지막 문자 출력
System.out.println();
}
strLength = 0; // 문자열 구하는 카운팅 다시 0으로 초기화
}
}
}
풀이2 - length()와 charAt활용
package BAEKJOON_9086;
/*
날짜 : 2024.07.15.월
내용 : 백준 9086번 문제 (문자열)
*/
import java.util.*;
public class BAEKJOON_9086 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 문자열을 몇번 입력받을지 세팅하는 변수 선언
String[] stringArray = new String[n];
sc.nextLine(); // \n 개행문자 제거
for (int i=0; i<n; i++) { // string배열에 입력받은 str들을 담아두기
String str = sc.nextLine(); // n번 만큼 문자열을 입력받기
stringArray[i] = str;
}
for(int i=0; i<n; i++) { //string형 배열을 순회하며 charAt을 활용하여 처음과 끝 문자열만 출력
int strLength = 0; // 문자열의 길이를 저장할 변수 선언
strLength = stringArray[i].length();
System.out.printf("%c%c \n",stringArray[i].charAt(0), stringArray[i].charAt(strLength-1));
}
}
}
아직 java 문법과 메서드들에 익숙치 않아서 charAt에 대해 몰랐었는데 아스키코드값 변환을 공부하다 알게되어 활용하여 다시 풀어보았다.
원래 다른 사람 코드를 참조하면 내가 푼게 아니라고 생각되어 풀 때에도 가능하면 참고하지 않고 내 힘으로만 풀려고 했는데 이번 charAt을 통해 모를 때만 서칭하는 것이 아니라 풀었어도 다른사람들은 어떻게 풀었는지 참고해서 다시 풀어보는 것 또한 효율적으로 실력을 기를 수 있다는 것을 알게 되었다.