TIL/알고리즘

[JAVA] 181934 조건 문자열 | 문자열 메서드 | split()

쑤키다요 2025. 2. 6. 23:34

Programmers 코딩테스트 기초 트레이닝 캘린더의 순서를 참고합니다

*소스 코드는 다음 깃허브에 단계 폴더로 구분되어 올라옵니다 - https://github.com/s0ooo0k/Algorithm_Study

 

GitHub - s0ooo0k/Algorithm_Study: Algorithm Study 문제 및 풀이

Algorithm Study 문제 및 풀이. Contribute to s0ooo0k/Algorithm_Study development by creating an account on GitHub.

github.com

 

 

 




 

👊🏼 오늘 해결한 문제

[프로그래머스 코딩 기초 트레이닝 LV0]

  • 조건 문자열

📝 TIL

- 조건 문자열

두 문자열 ineq와 eq가 주어집니다. ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다.

두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ n, m ≤ 100

입출력 예

입출력 예 #1

ineq eq n m result
"<" "=" 20 50 1
">" "!" 41 78 0

 

설계

  1. ineq를 먼저 비교하고
  2. eq를 비교해서 출력!

 

문자열 비교

 

1) 문자열이 같은지 비교할 땐! 

문제 자체는 이해가 쉽고, 삼항연산자를 써봐야지 해서 썼으나!

equals가 흐릿하게만 기억이 나고, 정확한 사용법이 잘 기억 나지 않았다.

 

문자열 비교 - equals() 메서드

`equals()` 메서드는 두 문자열의 '내용'이 같은지 비교한다.

즉 문자열 자체가 동일한 값을 가지고 있는지 확인!

 

# 예시 1. 

if (ineq.equals(">")){
            if (eq.equals("=")) answer = (n >=m)?1:0;
            else answer = (n>m)?1:0;
}
// ineq의 문자열과 ">" 이 같은지 확인.
// true - false로 반환!

 

소스코드

더보기

풀이 1 - 내 풀이

class Solution {
    public int solution(String ineq, String eq, int n, int m) {
        int answer = 0;
        if (ineq.equals(">")){
            if (eq.equals("=")) answer = (n >=m)?1:0;
            else answer = (n>m)?1:0;
        }
        else {
            if (eq.equals("=")) answer = (n <=m)?1:0;
            else answer = (n<m)?1:0;
        }
        return answer;
    }
}

 

📌 자주 사용되는 문자열 메서드

1. length() : 문자열의 길이(문자 수) 반환

String str = "Hello, sook";
int len = str.length(); // len = 11
System.out.println("Lenght: " + len); 
// Length : 11

 

2. charAt(int index) : 지정한 인덱스에 위치한 문자 반환

public class test {
  public static void main(String[] args) {
    String str = "Hello";
    char ch = str.charAt(1); // ch = e
    System.out.println(ch);
  }
}

 

Hello의 1번째 인덱스 값인 'e'를 반환!

 

3. substring(int beginIndex, int endIndex) : beginIndex ~ endIndex 직전까지 부분 문자열 반환

String str = "Hello, My name is sook";
    String sub = str.substring(2, 11);
    System.out.println(sub);
 // 출력 : llo, My n

 

  • Index값에 의해 반환되므로 당연히 공백, 특수문자 포함!
  • endIndex의 '직전' 까지 반환(위의 예시에서는 index[2] ~ index[10])

 

4. split() : 정규 표현식을 기준으로 문자열을 분리하고, 문자열 배열(String[])으로 반환한다.

String data = "apple,banana,cherry";
String[] fruits = data.split(",");  // 콤마(,)를 기준으로 문자열을 분리

for (String fruit : fruits) {
    System.out.println(fruit);
}

// 출력
apple
banana
cherry

 

1. 정규

 

- split() 메서드의 매개변수는 문자열이 아닌 '정규 표현식'

- 예시) split("\\s")

String text = "Java is fun";
String[] words = text.split("\\s");  // 공백을 기준으로 분리
for (String word : words) {
    System.out.println(word);
}

// 출력
Java
is
fun

 

 

2. 정규식 특수문자 처리

- 만약 구분자로 특수문자 '.', ' | ', ' * ' 등을 사용하려면, 이스케이프 문자(\\)을 사용하여 특수 의미 제거

String data = "192.168.0.1";
	// 점(.)은 정규식에서 아무 문자 한 개, 실제 점(.)으로 분리하려면 \\.
String[] numbers = data.split("\\.");
for (String num : numbers) {
    System.out.println(num);
}

// 출력
192
168
0
1

 

 

 

+) 정규 표현식

정규 표현식 설명 예시
^ 문자열의 시작을 나타냅니다. ^Hello는 "Hello"로 시작하는 문자열과 매치됩니다.
$ 문자열의 끝을 나타냅니다. world$는 "world"로 끝나는 문자열과 매치됩니다.
. 임의의 단일 문자(줄바꿈 제외)를 의미합니다. h.t는 "hat", "hit", "hot" 등 한 문자 차이의 문자열과 매치됩니다.
* 0회 이상 반복을 의미합니다. ab*는 "a", "ab", "abb", "abbb" 등 "b"가 0회 이상 반복되는 패턴과 매치됩니다.
+ 1회 이상 반복을 의미합니다. ab+는 "ab", "abb", "abbb" 등 "b"가 최소 1회 이상 반복되는 패턴과 매치됩니다.
\s 공백 문자를 의미합니다 \\s+를 사용하면 하나 이상의 공백 문자에 매치됩니다.
\d 숫자(0-9)를 의미합니다. \d{3}는 정확히 3자리 숫자(예: "123")와 매치됩니다.
\D 숫자가 아닌 문자를 의미합니다. \D+는 하나 이상의 숫자가 아닌 문자와 매치됩니다.
\w 단어 문자 (영문자, 숫자, 언더스코어)를 의미합니다. \w+는 하나 이상의 단어 문자(예: "Hello", "var_123")와 매치됩니다.
\W 단어 문자가 아닌 문자를 의미합니다. \W+는 하나 이상의 단어 문자가 아닌 문자(예: 공백, 특수문자)와 매치

 


🚀 새로 배운 것

1. equals()은 a.equals(b) 형태로 문자열의 내용이 같은지 비교한다.

2. split()을 활용하여 문자열을 처리하자. -> 데이터나 긴 문자열 처리시 자주 쓰인다!

 


😺  느낀점

- 복습이 생명! 꾸준히 반복하자

- 옛날에는 삼항연산자, 문자열 메서드 사용 자체가 어려웠는데 예전보다는 훨씬 수월하게 푸는 거 같다!