오늘은 9일 차입니다! 조금씩 시간이 단축되고 있는 게 느껴지네요. 파이팅입니다~!
문제 설명
단어의 개수 n을 받고 n번 만큼 문자를 받아옵니다. 각 문자 중에 하나가 컴퓨터 암호이고 이를 거꾸로 뒤집은 단어도 저장되어 있어 이를 판별하여 비밀번호를 구하는 문제입니다.
https://www.acmicpc.net/problem/9933
생각 흐름
문제 길이가 비교적 짧아 기분좋게 접근했던 문제였습니다. 천천히 읽어보니 문자를 받아 이를 거꾸로 뒤집는 듯한 느낌의 문제였어요.
그래서 reverse() 함수를 바로 떠올렸고, string 객체 특성을 이용해서 하나씩 조건문을 작성하면 될 것 같다는 생각을 하였습니다.
일일이 비교해주기 위해선, 2중 for문과 조건식으로 처리하고 flag라는 부울 변수를 통해 for문을 탈출하는 식의 구문을 작성하면 되겠다는 생각을 하였어요.
오늘 문제는 reverse() 함수를 알고 있냐를 물어보는 문제인 거 같아서 비교적 쉽게 풀었던 것 같습니다.
#include <bits/stdc++.h>
using namespace std;
int n; // 단어의 개수 n
string result; // 정답 단어 result
vector <string> v; // 단어를 저장할 벡터 v
void solve() {
bool flag = false;
for (int i = 0; i < n; i++) {
string check = v[i];
reverse(check.begin(), check.end());
for (int j = i; j < n; j++) {
if (v[j] == check) {
result = v[j];
flag = true;
break;
}
}
if (flag) break;
}
}
int main() {
ios_base::sync_with_stdio();
cin.tie(); cout.tie();
cin >> n;
for (int i = 0; i < n; i++) {
string temp;
cin >> temp;
v.push_back(temp);
}
solve();
cout << result.size() << " " << result[result.size() / 2];
return 0;
}
공부한 내용 정리
1. reverse() 함수
reverse(first, last); : 배열, 문자열 등의 요소들을 거꾸로 뒤집음
- 헤더 : <algorithm>
- (first, last) : first를 포함한 인덱스부터 last 바로 전 인덱스까지의 요소들을 거꾸로 뒤집음
----> 중요한 건, 'index'를 집어넣어야 한다는 것!
배열의 경우
reverse(a, a+5); // a배열의 처음부터 끝까지 뒤집음 (a[5] 배열)
reverse(b+1, b+4); // b배열의 두번째 요소부터 네번째 요소까지 뒤집음 (b[5] 배열)
배열은 배열 이름이 0번째 인덱스의 주소이므로 배열이름으로 + 연산해 접근하면 되지만, string과 vector는 '객체'이므로 방법이 다르다.
string, vector의 경우
reverse(str.begin(), str.end()); // string의 처음부터 끝까지 뒤집음
reverse(v.begin()+1, v.end()-1); // vector의 두번째 요소부터 네번째 요소까지 뒤집음
.begin()과 .end() 함수로 인덱스를 접근한다.
'코테 > 항해99' 카테고리의 다른 글
[99클럽 코테 스터디 11일차 TIL] #해시7 (0) | 2024.11.07 |
---|---|
[99클럽 코테 스터디 10일차 TIL] #해시6 (0) | 2024.11.07 |
[99클럽 코테 스터디 8일차 TIL] #해시4 (4) | 2024.11.04 |
[99클럽 코테 스터디 7일차 TIL] #해시3 (7) | 2024.11.04 |
[99클럽 코테 스터디 6일차 TIL] #해시2 (2) | 2024.11.03 |