Skip to content

Commit 49e1233

Browse files
committed
[level 1] Title: 숫자 문자열과 영단어, Time: 13.84 ms, Memory: 75.5 MB -BaekjoonHub
1 parent ef2a84e commit 49e1233

File tree

2 files changed

+221
-0
lines changed

2 files changed

+221
-0
lines changed
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# [level 1] 숫자 문자열과 영단어 - 81301
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/81301)
4+
5+
### 성능 요약
6+
7+
메모리: 75.5 MB, 시간: 13.84 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 2021 카카오 채용연계형 인턴십
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 05월 06일 19:09:12
20+
21+
### 문제 설명
22+
23+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/d31cb063-4025-4412-8cbc-6ac6909cf93e/img1.png" title="" alt="img1.png"></p>
24+
25+
<p>네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.<br><br>
26+
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.</p>
27+
28+
<ul>
29+
<li>1478 → "one4seveneight"</li>
30+
<li>234567 → "23four5six7"</li>
31+
<li>10203 → "1zerotwozero3"</li>
32+
</ul>
33+
34+
<p>이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 <code>s</code>가 매개변수로 주어집니다. <code>s</code>가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.</p>
35+
36+
<p>참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.</p>
37+
<table class="table">
38+
<thead><tr>
39+
<th>숫자</th>
40+
<th>영단어</th>
41+
</tr>
42+
</thead>
43+
<tbody><tr>
44+
<td>0</td>
45+
<td>zero</td>
46+
</tr>
47+
<tr>
48+
<td>1</td>
49+
<td>one</td>
50+
</tr>
51+
<tr>
52+
<td>2</td>
53+
<td>two</td>
54+
</tr>
55+
<tr>
56+
<td>3</td>
57+
<td>three</td>
58+
</tr>
59+
<tr>
60+
<td>4</td>
61+
<td>four</td>
62+
</tr>
63+
<tr>
64+
<td>5</td>
65+
<td>five</td>
66+
</tr>
67+
<tr>
68+
<td>6</td>
69+
<td>six</td>
70+
</tr>
71+
<tr>
72+
<td>7</td>
73+
<td>seven</td>
74+
</tr>
75+
<tr>
76+
<td>8</td>
77+
<td>eight</td>
78+
</tr>
79+
<tr>
80+
<td>9</td>
81+
<td>nine</td>
82+
</tr>
83+
</tbody>
84+
</table>
85+
<hr>
86+
87+
<h5>제한사항</h5>
88+
89+
<ul>
90+
<li>1 ≤ <code>s</code>의 길이 ≤ 50</li>
91+
<li><code>s</code>가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.</li>
92+
<li>return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 <code>s</code>로 주어집니다.</li>
93+
</ul>
94+
95+
<hr>
96+
97+
<h5>입출력 예</h5>
98+
<table class="table">
99+
<thead><tr>
100+
<th>s</th>
101+
<th>result</th>
102+
</tr>
103+
</thead>
104+
<tbody><tr>
105+
<td><code>"one4seveneight"</code></td>
106+
<td>1478</td>
107+
</tr>
108+
<tr>
109+
<td><code>"23four5six7"</code></td>
110+
<td>234567</td>
111+
</tr>
112+
<tr>
113+
<td><code>"2three45sixseven"</code></td>
114+
<td>234567</td>
115+
</tr>
116+
<tr>
117+
<td><code>"123"</code></td>
118+
<td>123</td>
119+
</tr>
120+
</tbody>
121+
</table>
122+
<hr>
123+
124+
<h5>입출력 예 설명</h5>
125+
126+
<p><strong>입출력 예 #1</strong></p>
127+
128+
<ul>
129+
<li>문제 예시와 같습니다.</li>
130+
</ul>
131+
132+
<p><strong>입출력 예 #2</strong></p>
133+
134+
<ul>
135+
<li>문제 예시와 같습니다.</li>
136+
</ul>
137+
138+
<p><strong>입출력 예 #3</strong></p>
139+
140+
<ul>
141+
<li>"three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.</li>
142+
<li>입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.</li>
143+
</ul>
144+
145+
<p><strong>입출력 예 #4</strong></p>
146+
147+
<ul>
148+
<li><code>s</code>에는 영단어로 바뀐 부분이 없습니다.</li>
149+
</ul>
150+
151+
<hr>
152+
153+
<h5>제한시간 안내</h5>
154+
155+
<ul>
156+
<li>정확성 테스트 : 10초</li>
157+
</ul>
158+
159+
160+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
static Map<String, String> map = new HashMap();
5+
6+
public int solution(String s) {
7+
8+
String tmp = "";
9+
String result = "";
10+
map.put("zero", "0");
11+
map.put("one", "1");
12+
map.put("two", "2");
13+
map.put("three", "3");
14+
map.put("four", "4");
15+
map.put("five", "5");
16+
map.put("six", "6");
17+
map.put("seven", "7");
18+
map.put("eight", "8");
19+
map.put("nine", "9");
20+
21+
for(int i=0; i<s.length()-1; i++){
22+
char curr = s.charAt(i);
23+
char next = s.charAt(i+1);
24+
25+
26+
// 현재 인덱스, 다음 인덱스 둘다 문자
27+
if(curr>='a' && curr<='z' && next>='a' && next<='z'){
28+
tmp+=curr;
29+
if(map.containsKey(tmp)){ //문자형태의 숫자들이 연속적으로 나열되어있는 경우 고려
30+
result+=map.get(tmp);
31+
tmp="";
32+
}
33+
}
34+
35+
// 현재 인덱스 문자, 다음 인덱스 숫자
36+
else if(curr>='a' && curr<='z' && next>='0' && next<='9'){
37+
tmp+=curr;
38+
result+=map.get(tmp); //map에서 해당하는 숫자 찾기
39+
tmp=""; //임시 문자열 초기화
40+
}
41+
42+
//현재 인덱스 숫자 -> 결과에 추가
43+
else{
44+
result+=curr;
45+
}
46+
}
47+
48+
char c = s.charAt(s.length()-1);
49+
if(c >= 'a' && c <= 'z'){
50+
tmp+=c;
51+
result+=map.get(tmp);
52+
}
53+
else{
54+
result+=c;
55+
}
56+
57+
System.out.println(result);
58+
int answer = Integer.parseInt(result);
59+
return answer;
60+
}
61+
}

0 commit comments

Comments
 (0)