-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
Java로 코딩테스트를 풀다 보면 문자열(String) 때문에 예상치 못한 실수를 하는 경우가 많다.
이는 Java의 문자열이 배열처럼 보이지만 실제로는 전혀 다른 특성을 가진 객체이기 때문이다.
아래 주의사항들을 정확히 이해하면 문자열 문제에서 불필요한 오답을 크게 줄일 수 있다.
1. String은 배열이 아니다
Java에서 String은 배열처럼 보이지만 배열이 아니다.
String s = "hello";겉보기에는 문자들이 인덱스를 가지고 나열되어 있지만,
s[0]; // ❌ 컴파일 에러처럼 배열 접근 방식은 사용할 수 없다.
✔ 올바른 접근 방법
char c = s.charAt(0);문자열 내부의 문자는 charAt(index) 메서드로만 접근 가능하다.
2. String은 immutable(불변)이다
Java의 String은 한 번 생성되면 절대 바뀌지 않는다.
String s = "1100";
s.replace("0", "");
System.out.println(s); // 1100replace()를 호출해도 원본 문자열은 바뀌지 않는다.
항상 새로운 문자열을 반환할 뿐이다.
✔ 반드시 이렇게 써야 한다
s = s.replace("0", "");3. 문자열 비교에 ==를 쓰면 안 된다
if (a == b) { ... } // ❌ 위험==는 문자열의 **내용이 아니라 참조(주소)**를 비교한다.
✔ 문자열 내용 비교는 무조건 equals()
if (a.equals(b)) { ... }✔ null 안전한 비교
if ("1".equals(s)) { ... }이 방식은 코딩테스트에서 가장 안전하다.
4. 문자 비교는 반드시 '0' 처럼 한다
문자열 안의 한 글자는 char 타입이다.
if (s.charAt(i) == '0') { ... } // ✅아래는 전부 잘못된 예다.
s.charAt(i) == 0 // ❌
s.charAt(i) == "0" // ❌
s[i].equals("0") // ❌5. 특정 위치의 문자를 직접 바꿀 수 없다
s.charAt(i) = '0'; // ❌String은 수정이 불가능하다.
✔ 수정이 필요하면 StringBuilder
StringBuilder sb = new StringBuilder(s);
sb.setCharAt(i, '0');
s = sb.toString();6. 문자열에 count() 같은 함수는 없다
Java String에는 특정 문자의 개수를 세는 count() 메서드가 없다.
✔ 가장 안전한 방법
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '0') count++;
}7. 코딩테스트에서는 static 전역 변수 사용에 주의
-
프로그래머스 / LeetCode
→solution()밖static변수 ❌ (테스트 케이스 누적 위험) -
SWEA / 백준
→ 사용 가능 ⭕ (직접 초기화 필수)
플랫폼에 따라 실행 구조가 다르기 때문에 반드시 구분해야 한다.
핵심 요약 (시험 직전용)
String은 배열이 아니다 →charAt()String은 불변이다 → 반환값 재할당 필수- 문자열 비교 →
equals() - 문자 비교 →
'0' - 수정 필요 →
StringBuilder - count 함수 없음 → 직접 센다
이 주의사항들만 정확히 지켜도
Java 문자열 문제에서 틀릴 확률이 확 줄어든다.
특히 코딩테스트에서는 “될 것 같은 코드”보다
명확하게 안전한 코드를 쓰는 게 가장 중요하다.
Reactions are currently unavailable