[Leetcode] 93. Restore IP Addresses
Algorithm2021. 11. 23. 13:55
반응형
IDEA : O(n³) Brute force로 가능한 ip 분할을 모두 탐색함
s 길이가 3이하 혹은 13이상이면 ""리턴
1단계 1,2,3 분할
2단계 1,2,3 분할
3단계 1,2,3 분할
4단계 3단계에 맞게 ip설정
다음 단계로 넘어갈 때 이전 단계에서 분할한 ip가 맞는지 확인 후 넘어감
class Solution {
public:
vector<string> restoreIpAddresses(string s)
{
vector<string> ans;
if(s.size() > 12 || s.size() < 4)
return ans;
int remain; // 한 단계 분할 후 사용할 수 있는 남은 글자수를 저장
string a_ip,b_ip,c_ip,d_ip;
for(int a=1; a<=3; a++)
{
a_ip = s.substr(0,a);
remain = s.size() - a_ip.size();
if(remain >= 3 && is_able(a_ip))
{
for(int b=1; b<=3; b++)
{
b_ip = s.substr(a,b);
remain = s.size() - a_ip.size() - b_ip.size();
if(remain >= 2 && is_able(b_ip))
{
for(int c=1; c< remain; c++)
{
c_ip = s.substr(a+b,c);
d_ip = s.substr(a+b+c, s.size() - a+b+c);
if(is_able(c_ip) && is_able(d_ip))
ans.push_back(a_ip+"."+b_ip+"."+c_ip+"."+d_ip);
}
}
}
}
}
return ans;
}
bool is_able(string a)
{
if(a.size() >= 2 && a[0] == '0') //2자리순데 처음이 0으로 시작하면 안됨
return false;
else if(stoi(a) > 255) //ip 허용 범위 초과하면 안됨
return false;
return true;
}
};
반응형
'Algorithm' 카테고리의 다른 글
[Leetcode] 342. Power of Four (C++) (0) | 2021.11.25 |
---|---|
[백준] C++ 2775. 부녀회장이 될테야 (0) | 2021.11.24 |
[백준] 10757. 큰수 A+B (1) | 2021.11.23 |
[백준] 15947. 아기 석환 뚜루루 뚜루 (1) | 2021.11.23 |
[Leetcode] 686. Repeated String Match (re) C++ (0) | 2021.11.22 |
댓글()