![[프로그래머스] 숫자 문자열과 영단어](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEqDu3%2FbtsJKinYJCt%2FmuqEYViHZbd90WCkEC0Fok%2Fimg.png)
[프로그래머스] 숫자 문자열과 영단어프로그래머스2024. 9. 23. 20:33
Table of Contents
https://school.programmers.co.kr/learn/courses/30/lessons/81301?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📌 내가 구현한 정답
class Solution {
public int solution(String s) {
String[] numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String answer = s;
for (int i = 0; i < numbers.length; i++) {
answer = answer.replace(numbers[i], String.valueOf(i));
}
return Integer.parseInt(answer);
}
}
- numbers 배열: 각 숫자에 해당하는 영어 단어를 배열로 선언.
- replace 메서드: 각 숫자 단어가 등장할 때마다 해당 숫자로 대체.
- Integer.parseInt: 변환된 숫자 문자열을 정수로 변환.
answer.replace(numbers[i], String.valueOf(i))
- replace: 문자열에서 특정 패턴을 찾아 다른 문자열로 바꾸는 기능
- 첫 번째 인자(numbers[i]): 바꾸고자 하는 대상.
여기서는 numbers[i]로 각 숫자에 해당하는 영어 단어가. 예를 들어 numbers[0]는 "zero", numbers[1]는 "one" - 두 번째 인자(String.valueOf(i)): 교체할 값.
여기서 i는 0부터 9까지의 숫자를 나타내고, String.valueOf(i)는 해당 숫자를 문자열로 변환.
예를 들어 i가 0이면 String.valueOf(0)은 "0", i가 1이면 "1"이 된다.
- 첫 번째 인자(numbers[i]): 바꾸고자 하는 대상.
📖✏️ TIL
문자열 치환 함수
📌 replace
자신이 바꾸고싶은 문자로 문자열을 치환시켜주는 기능
String a = "무궁화 삼천리 화려강산 대한사람 대한으로 길이 보전하세 ";
//replace([기존문자],[바꿀문자])
a= a.replace("대한", "민국");
System.out.println(a);
//결과값 : 무궁화 삼천리 화려강산 민국사람 민국으로 길이 보전하세
String str = "hello world";
String result = str.replace('o', 'a'); // 문자 교체
System.out.println(result); // "hella warld"
String result2 = str.replace("world", "Java"); // 문자열 교체
System.out.println(result2); // "hello Java"
📌 replaceAll
replaceAll 함수는 자신이 바꾸고싶은 문자로 문자열을 전부 치환시켜주는 기능을 한다.
여기서 replace와 replaceAll과의 같은 것이 아니냐고 반문을 할 수도 있을 듯하다. 실제로 나오는 결과물의 값이 같다. 하지만 차이점은 분명 있다.
String a = "무궁화 삼천리 화려강산 대한사람 대한으로 길이 보전하세 ";
//replaceAll([정규식],[바꿀문자])
a= a.replaceAll("대한", "민국");
System.out.println(a);
//결과값 : 무궁화 삼천리 화려강산 민국사람 민국으로 길이 보전하세
📌 replace와 replaceAll의 차이점
String a = "무궁화. 삼천리. 화려강산. 대한사람. 대한으로. 길이. 보전하세 ";
//replace([기존문자],[바꿀문자])
a = a.replace(".", "/");
System.out.println(a);
//결과값 : 무궁화/ 삼천리/ 화려강산/ 대한사람/ 대한으로/ 길이/ 보전하세
. 을 /로 치환할 경우 replace함수는 . 을 /로 정상적으로 바꾸어주었지만
String a = "무궁화. 삼천리. 화려강산. 대한사람. 대한으로. 길이. 보전하세 ";
//replaceAll([정규식],[바꿀문자])
a = a.replaceAll(".", "/");
System.out.println(a);
//결과값 : /////////////////////////////////////
replaceAll 같은 경우 문자열 전체가 치환되는 것을 확인할 수 있다.
.(마침표)가 정규식으로 모든 문자를 의미하기 때문에 나타난 현상이다.
만약 점(.)만을 /로 바꾸고 싶다면, 정규식에서 점은 이스케이프해야 하므로 replaceAll("\\.", "/")로 수정해야한다.
String str = "hello world";
String result = str.replaceAll("o", "a"); // 정규 표현식 사용 (문자열 "o"를 모두 "a"로 교체)
System.out.println(result); // "hella warld"
String result2 = str.replaceAll("\\s", "_"); // 정규 표현식 사용 (공백을 "_"로 교체)
System.out.println(result2); // "hello_world"
String text = "a.b.c";
// replace: 단순 문자열 교체
String replaced = text.replace(".", "-");
System.out.println(replaced); // a-b-c
// replaceAll: 정규식 사용, .을 교체하려면 \\를 사용해야 함
String replacedAll = text.replaceAll("\\.", "-");
System.out.println(replacedAll); // a-b-c
주요 차이점:
- 정규 표현식 지원 여부:
- replace: 정규 표현식을 사용하지 않으며, 단순한 문자 또는 문자열을 교체한다.
- replaceAll: 정규 표현식을 사용하여 패턴에 맞는 부분을 교체한다.
- 교체 대상:
- replace: 문자(char)와 문자열(String) 모두 교체 가능하다.
- replaceAll: 문자열(String)만 교체할 수 있다.
요약
- replace: 특정 문자 또는 문자열을 그대로 교체 (정규 표현식 사용 안 함).
- replaceAll: 정규 표현식을 사용해 문자열을 교체.
📌 replaceFirst
String a = "무궁화 삼천리 화려강산 대한사람 대한으로 길이 보전하세 ";
//replaceFirst([기존문자],[바꿀문자])
a= a.replaceFirst("대한", "민국");
System.out.println(a);
//결과값 : 무궁화 삼천리 화려강산 민국사람 대한으로 길이 보전하세
replaceFirst 함수는 자신이 바꾸고 싶은 문자열이 처음으로 해당할 때만 치환시켜주는 기능을 한다.
🔑 참고
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 디펜스 게임 - LV 2 (0) | 2025.02.12 |
---|---|
[프로그래머스] 콜라 문제 (0) | 2024.09.30 |
[프로그래머스] 가장 가까운 같은 글자 (1) | 2024.09.25 |
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2024.09.24 |
[프로그래머스] 3진법 뒤집기 (0) | 2024.09.03 |
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!