์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ค๊ณ ๊ฑฐ๋ ์ํ ๊ตฌํ๊ธฐ
- ํด๊ฒฐ
- ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 5
- java
- 24955
- ํ๋ก๊ทธ๋๋จธ์ค
- 165672
- SSAFY
- 10๊ธฐ
- 14942
- ์ธํผ
- ๋ฐฑ์ค
- ๋ฑ์ฐ์ฝ์ค ์ ํ๊ธฐ
- ์นด์นด์ค
- ํต์ฌ
- ์ซ์ ์ด์ด ๋ถ์ด๊ธฐ
- 142085
- ์ํํฐ์ด
- ์ค๋ช
- ํ๊ธฐ
- ์๋ฃ
- MySQL
- PCCP
- ์ ๊ธฐ ์ฝ๋ฉ ์ธ์ฆํ๊ฐ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์ค๋ธ์
- SQL
- softeer
- ํผ์ฆ ์กฐ๊ฐ ์ฑ์ฐ๊ธฐ
- ์ฐ ๋ชจ์ ํ์ผ๋ง
- Today
- Total
๊ฐ๋ฐ ์ฅฌ์ค
[ํ๋ก๊ทธ๋๋จธ์ค/Java] 77886. 110 ์ฎ๊ธฐ๊ธฐ ๋ณธ๋ฌธ
๐ ๋ฌธ์ ๋งํฌ: https://school.programmers.co.kr/learn/courses/30/lessons/77886
๐ ํด๊ฒฐ ๊ณผ์
๋ฐฐ์ด s์ ๊ธธ์ด์ ์ต๋๊ฐ์ด 100๋ง์ด๊ณ , s์ ๋ชจ๋ ์์์ ๊ธธ์ด์ ํฉ์ด 100๋ง์ด๋ผ๋ ์๊ธฐ์ ์ฃผ์์ ์ด ํ์ํฉ๋๋ค.
์ ์๊ธฐ์ ์๋ฏธ๋ s์ ๋ฐฐ์ด์ด ์ต๋ 100๋ง์ด๋ผ๋ฉด s์ ์์์ ์ต๋ ๊ธธ์ด๋ 1์ด ๋๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ์ด ๋ฌธ์ ๋ ๋จ์ ๊ตฌํ์ผ๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ ๋ฌธ์ ์ ๋๋ค. ๊ตฌํ ๊ณผ์ ์ ํต์ฌ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1๏ธโฃ s์ ์์ ํ๋๋ฅผ ๊บผ๋ด "110"์ ํจํด์ ๊ฐ์ง ๋ฌธ์์ด์ ์์น๋ฅผ ์ฐพ์์ 110์ ๊ณ์ ์ ๊ฑฐํ๋ค.
2๏ธโฃ ์ ๊ฑฐํ 110์ ํ์๋ฅผ ์ ์ฅํ๋ค.
3๏ธโฃ 110์ ์ ๊ฑฐํ ์ต์ข ์์ a๋ 110์ ํจํด์ ๊ฐ์ง์ง ์์ ๊ฒ์ด๋ฏ๋ก 110์ ๋ฃ์ ์์น๋ฅผ ์ฐพ๋๋ค.
4๏ธโฃ ์ฌ์ ์์ผ๋ก ๋ฌธ์์ด์ ๋ง๋ค์ด์ผํ๋ฏ๋ก a์์ 0์ด ๋ง์ง๋ง์ ๋ฑ์ฅํ ์์น๋ฅผ ์ฐพ๋๋ค.
5๏ธโฃ ๋ง์ง๋ง 0์์น ๋ค์ 110์ ๊ณ์ ์ด์ด๋ถ์ฌ์ค๋ค.
6๏ธโฃ ๋ง์ฝ a์์ 0์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด "110"ํจํด์์ 0์ด ์กด์ฌํ๋ฏ๋ก ์ฌ์ ์์ ๋ฐ๋ผ์ a์์ "110"์ ๋ถ์ฌ์ค๋ค.
์๋ฅผ ๋ค์ด์ s = "0111111010"์ ๋ฌธ์์ด์ด ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ๋ต์ ๋์ถํ ์๊ฐ ์์ต๋๋ค.
1๏ธโฃ "110" ํจํด ์ ๊ฑฐ ํ s ์ํ: "0111110", ์ ๊ฑฐํ "110" ํ์: 1
2๏ธโฃ "110" ํจํด ์ ๊ฑฐ ํ s ์ํ: "0111", ์ ๊ฑฐํ "110" ํ์: 2
3๏ธโฃ "110" ํจํด์ด ์๋ณด์ด๋ฏ๋ก "0111"์์ 0์ ๋ง์ง๋ง ์์น์ธ 0๋ฒ ์ธ๋ฑ์ค ๋ค์ "110" ํจํด์ ๋ฃ์ด๋๋ค.
4๏ธโฃ "110" ์ฝ์ ํ s ์ํ: "0110111", ๋จ์ "110" ํ์: 1, ๋ง์ง๋ง '0'์ ์ธ๋ฑ์ค: 3
5๏ธโฃ ๋ง์ง๋ง '0' ์ธ๋ฑ์ค ์์น ๋ค์ "110" ์ฝ์ ํ s ์ํ: "0110110111", ๋จ์ "110" ํ์: 0
๊ฒฐ๊ณผ์ ์ผ๋ก "0110110111"์ ๋ฌธ์์ด์ด ์ฌ์ ์์ผ๋ก ์ ์ผ ์์ ๋ฌธ์์ด์ ์ ์งํ๋ฉด์ "110"์ ์์น๋ฅผ ์ฎ๊ธด ๊ฒ์ด ๋ฉ๋๋ค.
"110"์ ๊ณ์ ์ ๊ฑฐํ ๋ฌธ์์ด ๊ฒฐ๊ณผ ์ ๋ณด์ ์ ๊ฑฐํ "110" ๋ฌธ์์ด์ ๊ฐ์ ์ ๋ณด๊ฐ ํ์ํ๋ฏ๋ก class๋ฅผ ํ์ฉํ์ฌ ํด๋น ์ ๋ณด๋ค์ ์ ์ฅํ ๋ค์ "110"์ ์ ๊ณผ์ ์ ๋ฐ๋ผ ๋ถ์ฌ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ต๋๋ค.
๐ ํ๊ณ ์
"110"์ ์์น๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด ์ฌ์ ์์ผ๋ก ์ ์งํ๋ฉด์ ์ฎ๊ธธ ์ ์์์ง ๊ณ ๋ฏผ์ด ์ข ๊ธธ์๋ ๋ฌธ์ ์์ต๋๋ค. ๊ทผ๋ณธ์ ์ผ๋ก๋ ์๊ฐ์ด๊ณผ ์ฐ๋ ค ๋๋ฌธ์ ๊ณ ๋ฏผ์ด ์์์ง๋ง ์์ผ๋ก ์กฐ๊ฑด์ ์ข ๋ ์์ธํ๊ฒ ๋ด์ผ๊ฒ ๋ค๋ ๋ฐ์ฑ์ ํ ์ ์์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ s์ ์์์์ "110" ํจํด ๋ฌธ์์ด์ ์ ๊ฑฐํ ํ ๊ทธ ์ดํ์ ํจํด์ ํ์ธํ๊ธฐ ์ํ ์ธ๋ฑ์ฑ ๊ณผ์ ์์ ์๋ฌ ์ฌํญ์ด ์์์ต๋๋ค. ์ธ๋ฑ์ฑ ๊ด๋ จ ๋ณ์๊ฐ ์์๊ฐ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ์ง ๋ชปํ๋๋ฐ ๋ณํ๋ ๋ฌธ์์ด์ ๋ํ ์ธ๋ฑ์ฑ ๋ฒ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์คํ๊ฒ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ฒ ๋์์ต๋๋ค.
โ๏ธ ์ฝ๋
import java.util.*;
/**
110์ ๋ฝ์์ ์์์ ์์น์ ๋ค์ ์ฝ์
ํจ.
์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์๋ ๋ฌธ์์ด์ ๋ง๋ค๊ธฐ
**/
class Remove110 {
private final StringBuilder afterRemove;
private final int count110;
public Remove110(StringBuilder afterRemove, int count110) {
this.afterRemove = afterRemove;
this.count110 = count110;
}
public StringBuilder getAfterRemove() {
return afterRemove;
}
public int getCount110() {
return count110;
}
}
class Solution {
public List<String> solution(String[] s) {
List<String> answer = new ArrayList<>();
// s์ ๋ฌธ์์ด์ ํ๋์ฉ ๊บผ๋ด๋ณด๊ธฐ: ๋ฐ๋ณต๋ฌธ (๋ฐฐ์ด์ ๊ธธ์ด: 100๋ง)
for (String input : s) {
Remove110 afterInfo = remove110(input); // 110์ ์ ๊ฑฐํ ๊ฒฐ๊ณผ ๋ฌธ์์ด
if (afterInfo == null) {
continue;
}
int count110 = afterInfo.getCount110();
StringBuilder afterRemove = afterInfo.getAfterRemove();
int afterLen = afterRemove.length();
int zeroIdx = -1;
for (int i = afterLen - 1; i >= 0; --i) {
if (afterRemove.charAt(i) == '0') {
zeroIdx = i;
break;
}
}
// ํด๋น ์๋ฆฌ ๋ค์ count ๋งํผ ๊ฒฐ๊ณผ๋ฅผ ๋ฃ์ด๋๊ธฐ
for (int i = 0; i < count110; ++i) {
afterRemove.insert(zeroIdx + 1, "110");
zeroIdx += 3;
}
answer.add(afterRemove.toString());
}
return answer;
}
private Remove110 remove110(final String input) {
StringBuilder sb = new StringBuilder(input);
int count110 = 0;
int i = 0;
while (i <= sb.length() - 3) {
if (sb.charAt(i) == '1' && sb.charAt(i + 1) == '1' && sb.charAt(i + 2) =='0') {
count110++;
sb.delete(i, i + 3);
// ๋ค์ ์กฐ๊ธ ์์ผ๋ก ๋์๊ฐ์ ์ฌ๊ฒ์ฌ ํ์:
i = Math.max(0, i - 2); // or i--, i-2 ๋ฑ
} else {
i++;
}
}
return new Remove110(sb, count110);
}
}