ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
์ฐฝ์์ด๋ ๊ฐ์ฐ์ด์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์น๊ธฐ ์ํด์ ๊ฐ์ฐ์ด๊ฐ ์ฌ์ฉํ๋ ์ปดํจํฐ์ ํค๋ก๊ฑฐ๋ฅผ ์ค์นํ๋ค. ๋ฉฐ์น ์ ๊ธฐ๋ค๋ฆฐ ๋์ ์ฐฝ์์ด๋ ๊ฐ์ฐ์ด๊ฐ ๋น๋ฐ๋ฒํธ ์ฐฝ์ ์ ๋ ฅํ๋ ๊ธ์๋ฅผ ์ป์ด๋๋ค.
ํค๋ก๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ํค๋ณด๋๋ฅผ ๋๋ฅธ ๋ช ๋ น์ ๋ชจ๋ ๊ธฐ๋กํ๋ค. ๋ฐ๋ผ์, ๊ฐ์ฐ์ด๊ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ ๋, ํ์ดํ๋ ๋ฐฑ์คํ์ด์ค๋ฅผ ์ ๋ ฅํด๋ ์ ํํ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ผ ์ ์๋ค.
๊ฐ์ฐ์ด๊ฐ ๋น๋ฐ๋ฒํธ ์ฐฝ์์ ์ ๋ ฅํ ํค๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฐ์ด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๊ฐ์ฐ์ด๋ ํค๋ณด๋๋ก ์ ๋ ฅํ ํค๋ ์ํ๋ฒณ ๋๋ฌธ์, ์๋ฌธ์, ์ซ์, ๋ฐฑ์คํ์ด์ค, ํ์ดํ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๊ฐ์ฐ์ด๊ฐ ์ ๋ ฅํ ์์๋๋ก ๊ธธ์ด๊ฐ L์ธ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. (1 ≤ L ≤ 1,000,000) ๊ฐ์ฐ์ด๊ฐ ๋ฐฑ์คํ์ด์ค๋ฅผ ์ ๋ ฅํ๋ค๋ฉด, '-'๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ ์ปค์์ ๋ฐ๋ก ์์ ๊ธ์๊ฐ ์กด์ฌํ๋ค๋ฉด, ๊ทธ ๊ธ์๋ฅผ ์ง์ด๋ค. ํ์ดํ์ ์ ๋ ฅ์ '<'์ '>'๋ก ์ฃผ์ด์ง๋ค. ์ด๋๋ ์ปค์์ ์์น๋ฅผ ์์ง์ผ ์ ์๋ค๋ฉด, ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ์ผ๋ก 1๋งํผ ์์ง์ธ๋ค. ๋๋จธ์ง ๋ฌธ์๋ ๋น๋ฐ๋ฒํธ์ ์ผ๋ถ์ด๋ค. ๋ฌผ๋ก , ๋์ค์ ๋ฐฑ์คํ์ด์ค๋ฅผ ํตํด์ ์ง์ธ ์๋ ์๋ค. ๋ง์ฝ ์ปค์์ ์์น๊ฐ ์ค์ ๋ง์ง๋ง์ด ์๋๋ผ๋ฉด, ์ปค์ ๋ฐ ์ปค์ ์ค๋ฅธ์ชฝ์ ์๋ ๋ชจ๋ ๋ฌธ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, ๊ฐ์ฐ์ด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค. ๋น๋ฐ๋ฒํธ์ ๊ธธ์ด๋ ํญ์ 0๋ณด๋ค ํฌ๋ค.
๋ฌธ์ ํ์ด
์ด๋ฒ ๋ฌธ์ ๋ ๋ฌธ์ ์๋ํฐ์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฌธ์ ์ ๋๋ค.
ํ์ด๋ก๋ Swift ์ฝ๋์์๋ ๋ ๊ฐ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์๊ณ , C++ ์ฝ๋์์๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
<swift>
๋ฐฐ์ด์ ์ด์ฉํ ๊ฒฝ์ฐ ์ฃผ์ํ ์ ์ '<' ์ฒ๋ฆฌ ๋ถ๋ถ์์๋ leftArr์ ๋ง์ง๋ง ์์๋ฅผ rightArr๋ก ์ฎ๊ฒจ์ฃผ๊ณ , '>' ์ฒ๋ฆฌ ๋ถ๋ถ์์๋ ๋ฐ๋๋ก rightArr์ ๋ง์ง๋ง ์์๋ฅผ leftArr๋ก ์ฎ๊ฒจ์ฃผ๋ฉด ๋ฉ๋๋ค. ์ด์ ๊ฐ์ ๊ธฐ๋ฅ์ ์คํ์ ์ด์ฉํ ์๋ ์๊ณ , ๋จ์ํ ๋ฐฐ์ด์ ์์ฑํ์ฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ ์๋ ์์ต๋๋ค.
๋ํ, ๊ณ์ํด์ ๋ฐฐ์ด์ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ง์ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์ ๊ทผ์ ํ์ง ์์ต๋๋ค. ๋น ๋ฐฐ์ด์ผ ๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ isEmpty๋ก ํ์ธํ๋ ๋ฐฉ๋ฒ๊ณผ ์ต์ ๋ ํ์ ์ ๋ฆฌํดํด์ฃผ๋ popLast ๋ฉ์๋๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
<cpp>
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ ์ iterator๊ฐ ๋ฆฌ์คํธ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์ํฉ์ ๋ง๋ค์ง ์๋ ๊ฒ์ ๋๋ค.
๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ L.begin()์ ์ ์ฅํ ๋ค, ์ปค์๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋์ง ๊ณ์ ํ์ธํด์ค๋๋ค.
(๋น ๋ฆฌ์คํธ์์ L.begin()๊ณผ L.end()๋ ๊ฐ์ ๊ฐ์ ๊ฐ์ง๋๋ค. ๋ํ, insert๋ฅผ ํ๋ฉด ํด๋น iter ์์ชฝ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ฒ์์ ์ ์ฅํ begin ๊ฐ์ ๊ณ์ํด์ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.)
ํ์ด ์์
1. Swift์ ๊ฒฝ์ฐ ๋ ๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ฃผ๊ณ , C++์ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ง์ํด์ฃผ๋ List๋ฅผ ์ ์ํด์ค๋๋ค.
2. ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฐ์ ์กฐ๊ฑด์ ๋ง๊ฒ ์ ์ฅํด์ค๋๋ค.
3. ์กฐ๊ฑด์ ๋ง๊ฒ ์ ์ฅ๋ ๊ฐ์ ์ถ๋ ฅํด์ค๋๋ค.
ํ์ด ์ฝ๋
< Swift>
// Swift
// ํ์ด 1: ๋ ๊ฐ์ ๋ฐฐ์ด ์ด์ฉ (๋ฌธ์์ด๋ก๋ ๊ฐ๋ฅ)
func solve(_ str: String) {
var leftArr = [Character]()
var rightArr = [Character]()
for char in str {
if char == "<" {
// if let last = leftArr.popLast() {
// rightArr.append(last)
// }
// ์ด ์ฝ๋๊ฐ ๋ฏธ์ธํ๊ฒ ๋น ๋ฆ
if !leftArr.isEmpty {
rightArr.append(leftArr.removeLast())
}
} else if char == ">" {
// if let last = rightArr.popLast() {
// leftArr.append(last)
// }
if !rightArr.isEmpty {
leftArr.append(rightArr.removeLast())
}
} else if char == "-" {
let _ = leftArr.popLast()
} else { // ๋ฌธ์ ์
๋ ฅ
leftArr.append(char)
}
}
print(String(leftArr) + String(rightArr.reversed()))
}
< C++>
// C++
#include <bits/stdc++.h>
using namespace std;
// ํ์ด 2: ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํ์ฉ
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
while(n--){
list<char> L = {};
auto iter = L.begin(); // ์ปค์
string cmd;
cin >> cmd;
for(auto c : cmd){ // ๋น ๋ฆฌ์คํธ์ผ ๊ฒฝ์ฐ, begin()๊ณผ end()๋ ๊ฐ์ ๊ฐ
if(c == '>'){
if(iter != L.end()) iter++;
}
else if(c == '<'){
if(iter != L.begin()) iter--;
}
else if(c == '-'){
if(iter != L.begin()){
iter--;
iter = L.erase(iter); // iter๊ฐ erase๋๋ฉด์ ๋ค์ ๊ฐ์ iter๋ฅผ ๋ฆฌํด
}
}
else{
L.insert(iter, c); // inter ์์ c๋ฅผ ์ถ๊ฐ
}
}
for(auto c : L) cout << c;
cout << '\n';
}
}
๋ง๋ฌด๋ฆฌ
์ด๋ฒ ๋ฌธ์ ์์๋ stack์ ์์ ํ ๊ตฌํํ์ง ์๊ณ ๋ฉ์๋๋ง์ ์ด์ฉํ์ฌ ๊ฐ๋ ์ ์ผ๋ก๋ง ์ ๊ทผํ์ต๋๋ค.
๋ํ, Swift์ removeLast()๋ @discardableResult๋ฅผ ์ด์ฉํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
(popLast()์ ๋ฆฌํด ํ์ ์ด ์ต์ ๋์ด๋ผ ๋น ๋ฐฐ์ด์ ์์ธ์ฒ๋ฆฌํ ๋ ์์ฃผ ์ฌ์ฉํ์๋๋ฐ, ํด๋น ๋ฉ์๋๋ @discardableResult๋ฅผ ์ฑํํ๊ณ ์์ง ์์ต๋๋ค.)
C++ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ iterator ๊ฐ๋ ์ ๋ํด์ ์ฐพ์๋ณด๊ฒ ๋์๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ํด ์กฐ๊ธ์ ๋ ์น์ํด์ง ๊ฒ ๊ฐ์ต๋๋ค. ์ดํ์๋ Swift์ iterator protocol๊ณผ sequence์ ๋ํด์๋ ๋ ํ๊ณ ๋ค๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
'Coding Test > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 10845๋ฒ - ํ (Swift, C++) (0) | 2024.02.23 |
---|---|
[BOJ] 10773๋ฒ - ์ ๋ก (Swift, C++) (0) | 2024.02.22 |
[BOJ] 10828๋ฒ - ์คํ (Swift, C++) (1) | 2024.02.20 |
[BOJ] 1475๋ฒ - ๋ฐฉ ๋ฒํธ (Swift) (0) | 2024.02.13 |
[BOJ] 10808๋ฒ - ์ํ๋ฒณ ๊ฐ์ (Swift) (1) | 2024.02.13 |
- ํ
- tipkit
- C++
- ๊ณต๊ฐ ๋ณต์ก๋
- 4949
- containerView
- ๊ท ํ์กํ ์ธ์
- 2023๋ ํ๊ณ
- ๊ดํธ์ ๊ฐ
- ์์ด ๋ด์ค
- 2024๋ ๋ชฉํ
- ์์ด ๊ณต๋ถ
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ๋ฒ์ฉ๊ณ ์ ์๋ณ
- ์ ๋ง๋๊ธฐ
- ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- remainder
- 10808
- pageViewController
- Container View Controller
- ์๋ฃ ๊ตฌ์กฐ
- gitkraken
- ๊ท๋๋ผ๋ฏธ ์์ด
- ๊ท๋๋ผ๋ฏธ ์์ด
- Anyobject
- BOJ
- ์คํ
- Swift
- 5397
- root view controller
- Total
- Today
- Yesterday