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 |
설계
- ineq를 먼저 비교하고
- 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()을 활용하여 문자열을 처리하자. -> 데이터나 긴 문자열 처리시 자주 쓰인다!
😺 느낀점
- 복습이 생명! 꾸준히 반복하자
- 옛날에는 삼항연산자, 문자열 메서드 사용 자체가 어려웠는데 예전보다는 훨씬 수월하게 푸는 거 같다!
'TIL > 알고리즘' 카테고리의 다른 글
[JAVA] 프로그래머스 | 81301 숫자 문자열과 영단어 (0) | 2025.04.01 |
---|---|
[JAVA] 프로그래머스 | 181945 문자열 돌리기 (0) | 2025.04.01 |
[CS] 시간복잡도와 공간복잡도 (0) | 2025.03.31 |
[TIL] Python3 | join 함수 | 문자열 포맷팅 (4) | 2025.01.23 |
[TIL] Python 문자열 출력 (1) | 2025.01.23 |