
✅ 오늘의 학습 키워드
- Scanner 사용 시 남아있는 개행 문자 처리
- 반복문으로 문자열 비교
- char[]을 이용
🔍 오늘의 문제 분석
- 1~50개의 길이가 같은 문자열이 주어진다.
- 알파벳 소문자로만 이루어져 있어 대소문자를 따로 구분하지 않아도 된다.
- 주어진 문자열을 모두 비교해야 한다.
- 공통된 문자는 남기고 다른 문자는 물음표로 대체해야 한다.
문제를 분석한 후 모든 문자열의 길이는 같기 때문에 첫 번째 들어오는 문자열의 길이만큼 반복적으로 비교해 줘야겠다고 생각했다. 문자열의 각 자리를 비교해야 하기 때문에 문자열 데이터를 저장하는 자료구조 중에서도 문자열 배열을 통해서 charAt 메서드를 사용하기로 했다. 그리고 처음에 주어지는 총 문자열의 개수대로 반복문을 사용해서 배열의 인덱스별로 비교해가고 싶었다.
✨ 오늘의 회고
import java.util.Scanner;
public class Day1_1032 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
scan.nextLine();
String s = scan.nextLine();
char[] chars = s.toCharArray();
for (int i = 0; i < n - 1; i++) {
String ss = scan.nextLine();
for (int k = 0; k < chars.length; k++) {
if (ss.charAt(k) != chars[k]) {
chars[k] = '?';
}
}
}
System.out.println(new String(chars));
}
}
오랜만에 푸는 자료구조 알고리즘 문제이다 보니 방향을 잡는데 시간이 오래 걸렸다. 반복문의 순서를 여러 번 바꿔가면서 풀었다. 첫 번째 문제는 Scanner 클래스를 사용하면서 처음 nextInt()로 숫자를 입력받으면 개행 문자(\n)가 남아있어서 그 후에 빈 문자열이 한번 들어가는 문제가 있었다. nextInt() 호출 후 scan.nextLine();을 한 번 더 호출해서 개행 문자를 없애고 입력을 받도록 해결했다. 그리고 마지막에 chars[] 에 담긴 데이터를 출력하는 과정에서 System.out.println(chars.toString());을 사용했더니 배열의 주소값이 출력되는 문제가 발생했다. char[] 배열을 바로 출력하면 문자열이 아니라 객체의 메모리 주소가 출력되므로, new String(chars)이나 String.valueOf()를 사용해서 String 클래스로 변환해서 출력했다.

new String(char[]) 형식이 익숙하지 않아서 문서를 확인했다. String 객체를 생성하는 생성자인데, String 내부적으로 char[]을 복사하여 저장하고 원본 배열을 수정해도 영향이 미치지 않는다고 한다.
어떻게 String 객체 생성자에 char[] 문자 배열을 입력할 수 있는지 궁금해졌다🤔
그래서 String 생성자에 대해 더 알아보았다. 자바에서 String은 내부적으로 char 문자가 여러 개 이어진 시퀀스를 저장하기 위한 자료형이다. 결국 String 객체는 가장 기본적인 자료 구조인 char[] 그 자체라고 봐도 되기 때문에 초기값으로 사용될 수 있다고 한다. 또 다른 String 생성자 파라미터 종류로는 byte[] 바이트배열, String 객체, 바이트 배열과 인코딩 방식, StringBuffer, 유니코드 포인트 배열이 있다는 것을 알게 되었다.
Scanner 대신 더 효율적으로 입력받기 위해서 BufferedReader를 사용해야겠다고 생각했다. 그리고 내일부터는 최적화한 코드와 메모리와 속도 부분에서 어떻게 달라지는지 확인해 봐야겠다. 99클럽 스터디는 다른 참가자들과 소통할 수 있고 원하면 코드를 공유할 수 있어서 좋은 것 같다. 나와 다른 풀이를 보면서 더 발전할 수 있을 것 같아 앞으로 기대가 된다.
'알고리즘 > [항해99] 1일 1알고리즘 스터디' 카테고리의 다른 글
| 99클럽 코테 스터디 6일차 TIL ✒️계단 오르기 (0) | 2025.04.07 |
|---|---|
| 99클럽 코테 스터디 5일차 TIL ✒️Stack을 Queue로 구현하기+제네릭 (0) | 2025.04.04 |
| 99클럽 코테 스터디 4일차 TIL ✒️Stack을 이용해서 Queue 구현 (0) | 2025.04.03 |
| 99클럽 코테 스터디 3일차 TIL ✒️!!초콜릿 중독 주의!! (0) | 2025.04.03 |
| 99클럽 코테 스터디 2일차 TIL ✒️ ASCII 코드 변환 (0) | 2025.04.02 |