https://softeer.ai/practice/info.do?idx=1&eid=804&sw_prbl_sbms_sn=236877
Softeer
연습문제를 담을 Set을 선택해주세요. 취소 확인
softeer.ai
<cpp 문제풀이>
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(int argc, char** argv)
{
int arr[26] = { 0, };
char arr2[26]={0,};
int count = 0;
map<char, int>m;
string message, key;
string answer;
cin >> message >> key;
for (int i = 0; i < key.length(); i++) {
int n = key[i] - 'A';
m.insert({ key[i],count });
if (arr[n] == 0)
count++;
arr[n] = 1;
}
for (int i = 0; i < 26; i++) {
if (i == 9) continue;
if (arr[i] == 0) {
m.insert({ 'A' + i,count });
count++;
}
}
for (int i = 0; i < message.length(); i += 2) {
if (i == message.length() - 1) {
answer += message[i];
answer += 'X';
}
else {
if (message[i] == message[i + 1]) {
if (message[i] == 'X') {
answer += message[i];
answer += 'Q';
}
else {
answer += message[i];
answer += +'X';
}
i -= 1;
}
else {
answer += message[i];
answer += message[i + 1];
}
}
}
for (auto iter = m.begin(); iter != m.end(); iter++)
{
arr2[iter->second] = iter->first;
}
for (int i = 0; i < answer.length(); i += 2) {
char a;
if (m[answer[i]] / 5 == m[answer[i + 1]] / 5) {
if(m[answer[i]] / 5== (m[answer[i]] + 1)/5)
answer[i] = arr2[m[answer[i]] + 1];
else
answer[i] = arr2[m[answer[i]] -4];
if (m[answer[i+1]] / 5 == (m[answer[i+1]] + 1) / 5)
answer[i+1] = arr2[m[answer[i+1]] + 1];
else
answer[i+1] = arr2[m[answer[i+1]] -4];
}
else if (m[answer[i]] % 5 == m[answer[i + 1]] % 5) {
answer[i]=arr2[(m[answer[i]]+5)%25];
answer[i+1] = arr2[(m[answer[i+1]] + 5) % 25];
}
else {
int n = m[answer[i + 1]] % 5 - m[answer[i]] % 5;
answer[i + 1] = arr2[m[answer[i + 1]] - n];
answer[i] = arr2[m[answer[i]] + n];
}
}
cout << answer;
return 0;
}
map을 이용하여 key값의 중복을 확인하며 번호를 부여하였고, 그 번호를 바탕으로 다시 arr2배열에 알파벳을 재배치 하였습니다.
이후 표에서 같은 행에 있을 경우) /5했을때의 값이 같으므로 arr2에서 다음값으로 변경해주었고, 예외로 다음값이 다음 행에 있을경우는 -4를 해주었습니다.
같은 열에 있을 경우) 나머지 값이 같으므로 %5를 사용하여 계산해주었고
위의 두 경우 모두 해당이 되지 않을 경우) 두 알파벳이 위치한 행에서 몇번째인지의 차를 이용하여 계산해 주었어요!
사실 C++기초만 알아도 이해될 정도로 쉬운 문법들만 사용해서 코드를 짰는데, 더 쉽게 짤 수 있는데도 복잡하게 구현한게 아닌가 싶네요 ㅠㅠ
혹시 더 간단하고 효율적으로 구현하신 분 계시다면 말씀 주시면 감사하겠습니다 ㅎㅎ!
다른 의견이나 질문 언제나 환영입니다!!
'C | C++ > Softeer 문제풀이' 카테고리의 다른 글
Softeer [HSAT 5회 정기 코딩 인증평가 기출] 성적 평가 C/C++ 문제풀이 (level 3) (0) | 2023.08.09 |
---|---|
Softeer 우물 안 개구리 C/C++ 문제풀이 (level 3) (0) | 2023.08.05 |
Softeer 8단 변속기 C/C++ 문제풀이 (level 2) (0) | 2023.08.04 |
Softeer GBC C/C++ 문제풀이 (level 2) (0) | 2023.08.03 |
Softeer [21년 재직자 대회 예선] 비밀 메뉴 C/C++ 문제풀이 (level 2) (0) | 2023.08.03 |
댓글