[C++ Programming] 실습Part1 : 15.모스부호(1), 16.순서쌍 개수 구하기
💻실습
15. 모스부호(1)
- 문제 설명
머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다.
그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다.
문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
모스부호는 다음과 같습니다.
morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'
}
- ⚠️제한사항
- 1 ≤ letter의 길이 ≤ 1,000
- return값은 소문자입니다.
- letter의 모스부호는 공백으로 나누어져 있습니다.
- letter에 공백은 연속으로 두 개 이상 존재하지 않습니다.
- 해독할 수 없는 편지는 주어지지 않습니다.
- 편지의 시작과 끝에는 공백이 없습니다.
- ✏️코드
#include <string>
#include <vector>
using namespace std;
///////////// My Solution
string solution(string letter) {
string answer = "";
string morse[26] = { ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",
".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",
".--","-..-","-.--","--.." };
// a~z 97~122
// 공백으로 나누어 담기
vector<string> morseLetter;
string tmp ="";
for (char c : letter) {
if (isspace(c)) {
morseLetter.push_back(tmp);
tmp = "";
}
else {
tmp += c;
}
}
morseLetter.push_back(tmp);
// 하나씩 해석하기
for (int i = 0; i < morseLetter.size(); i++) {
for (int j = 0; j < 26; j++) {
if (morseLetter[i] == morse[j]) {
answer += (j + 97);
}
}
}
return answer;
}
///////////// Professor Solution
class NotFoundError{};
char translate(string sub){
vector<string> dic = { ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",
".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",
".--","-..-","-.--","--.." };
for(int i = 0; i < dic.size(); i++){
if(sub == dic[i])
return 'a' + i;
}
throw NotFoundError(); // 위에서 안걸리면 error를 던짐
}
string solution(string letter) {
string answer = "";
int i, j;
for(i = 0; i < letter.length(); i = j + 1){
for(j = i; j < letter.length(); j++){
if(letter[j] == ' '){
answer += translate(letter.substr(i, j-i));
break;
}
}
if(j == letter.length()){
answer += translate(letter.substr(i, j-i+1));
}
}
return answer;
}
16. 순서쌍 개수 구하기
- 문제 설명
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다.
자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.
- ⚠️제한사항
- 1 ≤ n ≤ 1,000,000
- ✏️코드
///////// My Solution & Professor Solution
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
answer++;
}
}
return answer;
}