백준: Silver⑪ - 1358, 1406, 1431, 1448
</br>
계속 풀이
</br>
1358: 하키
https://www.acmicpc.net/problem/1358
하키 선수들이 몇 명 링크 안에 있는 지 세기
int r = (double)h/2.0;
int cnt = 0;
for(int i = 0; i < p; i++){
cin >> xs[i] >> ys[i];
if( x <= xs[i] && xs[i] <= x+w
&& y <= ys[i] && ys[i] <= y+h ) cnt++;
else if( dist(x,y+r, xs[i],ys[i]) <= r*r
|| dist(x+w,y+r, xs[i],ys[i]) <= r*r ) cnt++;
}
cout << cnt << endl;
링크가 네모 모양에 반원 두 개 붙인 모양이다.
그냥 네모 안에 있거나 반원 안에 있거나 하면 체크하면 된다
dist()
는 내나 그 함수, (두 점 사이 거리)^2를 리턴하는 애로 만듦
</br>
1406: 에디터
https://www.acmcpc.net/problem/1406
에디터 구현하기
list<char> l(s.begin(), s.end());
int n;
cin >> n;
auto cursor = l.end();
cin.ignore();
while( n-- > 0 ){
string s;
getline(cin, s);
if( s[0] == 'L' ){
if( cursor != l.begin() ) cursor--;
}
else if( s[0] == 'D' ){
if( cursor != l.end() ) cursor++;
}
else if( s[0] == 'B' ){
if( cursor != l.begin() ){
cursor--;
cursor = l.erase(cursor);
}
}
else if( s[0] == 'P' ){
char c = s[2];
l.insert(cursor, c);
}
}
for(char c : l){
cout << c;
}
cout << '\n';
시간 제한이 0.3초인 연결 리스트 문제다
이터레이터를 이동해서 커서처럼 쓴다.
그런데 이게 스택 풀이도 있다네…
생각도 못해서 풀이를 먼저 봐 버렸는데, 정리하면
- 스택 2개(커서의 왼쪽, 오른쪽)
- 처음 문자열을 전부 왼쪽 스택에 넣음(커서가 문자열 끝에 있으므로)
- L: 왼쪽 스택의 top을 오른쪽으로 push
- D: 오른쪽 스택의 top을 왼쪽으로 push
- B: 왼쪽 스택의 top을 pop
- P $: 왼쪽 스택에 $ push
- 출력은 왼쪽 스택에 거꾸로 쌓여 있으므로 왼쪽 스택을 전부 오른쪽 스택으로 옮긴 후 전체 출력
참신하다~~
</br>
1431: 시리얼 번호
https://www.acmcpc.net/problem/1431
시리얼 번호 조건에 맞게 정렬하기
bool cmp(string &s1, string &s2){
if( s1.size() == s2.size() ){
int c1 = 0, c2 = 0;
for(int i = 0; i < s1.size(); i++){
if( isdigit(s1[i]) ) c1 += s1[i] - '0';
}
for(int i = 0; i < s2.size(); i++){
if( isdigit(s2[i]) ) c2 += s2[i] - '0';
}
if( c1 == c2 ) return s1 < s2;
return c1 < c2;
}
return s1.size() < s2.size();
}
c++의 sort는 만능이에요
</br>
1448: 삼각형 만들기
https://www.acmicpc.net/problem/1448
삼각형의 최대 둘레 구하기
sort(a, a+n, greater<>());
int ans = -1;
for(int i = 0; i < n-2; i++){
if( a[i] < a[i+1] + a[i+2] ){
ans = a[i] + a[i+1] + a[i+2];
break;
}
}
cout << ans << endl;
갑자기 짱 쉽다
내림차순으로 정렬해서 삼각형이 만들어지는 지 확인하면 끝
</br>
이번 4문제는 다 쉬운 것들이었다 이제 정답률 45.552%~~
이제 막 던져보는 습관 좀 자제해야지
그리고 갑자기 골드 4가 되었다
그래도 일단 다음엔 실버 2도 풀어봐야 겠음
</br>
댓글남기기