[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 16장 ~ 20장

오늘도 꾸준하게 하는 알고리즘 공부~
16강 Anagram (아나그램 : 구글 인터뷰 문제)
문제 : Anagram이란 두 문자열이 알파벳의 나열 순서가 다르지만 구성이 일치하면 같은 단어를 말한다.
애너그램이 맞는지 아닌지를 출력하는 프로그램을 짜라!
Key Point : 나는 여기서 a
z, AZ를 배열로 생각하고 그 해당 문자가 나오면 해당 문자의 부분을 ++하는 형식으로 했다.
#include <iostream> #include <string> using namespace std; int main(){ string input1, input2; int digit; int input1_alphabet_lower[26] = {0}; int input1_alphabet_upper[26] = {0}; int input2_alphabet_lower[26] = {0}; int input2_alphabet_upper[26] = {0}; cin >> input1 >> input2; if(input1.size() != input2.size()){ cout << "NO" << endl; return 0; } for(int i=0; i< input1.size(); i++){ if(input1[i] >= 'A' && input1[i] <= 'Z'){ digit = input1[i] - 'A'; //cout << "digit : " << digit << endl; input1_alphabet_upper[digit]++; }else if (input1[i] >= 'a' && input1[i] <= 'z'){ //소문자면 digit = input1[i] - 'a'; input1_alphabet_lower[digit]++; }else{ cout << "Error!" << endl; } } for(int i=0; i<input2.size(); i++){ if(input2[i] >= 'A' && input2[i] <= 'Z'){ digit = input2[i] - 'A'; input2_alphabet_upper[digit]++; }else if (input2[i] >= 'a' && input2[i] <= 'z'){ digit = input2[i] - 'a'; input2_alphabet_lower[digit]++; }else{ cout << "Error!" << endl; } } for(int i=0; i < 26 ; i++){ if(input1_alphabet_lower[i] != input2_alphabet_lower[i]){ cout << "NO" << endl; return 0; //break; } if(input1_alphabet_upper[i] != input2_alphabet_upper[i]){ cout << "NO" << endl; return 0; //break; } } cout << "YES" << endl; return 0; }
17강. 선생님 퀴즈
현수네 반은 학생이 N명 있다. 수업도중 선생님이 잠깐 자리를 비워야 하는데 그동안 학생들이 떠들거나 놀지 않도록 각 학생들에게 퀴즈를 냈다. 선생님은 각 학생들에게 숫자가 적힌 카드를 줬는데, 각 학생들은 1부터 자기 카드에 적힌 숫자까지의 합을 구하는 퀴즈다.
첫줄에 반 학생수인 자연수 N이 주어진다.
두번째 줄부터는 1번 학생부터의 카드에 적힌 수와 학생이 구한 정답이 공백을 사이에 두고 입력된다.
#include <iostream> #include <string> using namespace std; int main(){ int N; cin >> N; for(int i=0; i<N; i++){ int num, sum; cin >> num >> sum; if(sum != num*(num+1)/2) cout << "NO" << endl; else cout << "YES" << endl; } return 0; }
그냥 1부터 N까지의 합을 구하는 수학 공식을 사용하면 매우 쉽다!
18강. 층간소음
T편한 세상 아파트는 층간소음 발생시 윗집의 발뺌을 방지하기 위해 애초에 아파트를 지을 때 바닥에 진동센서를 설치했다. 이 센서는 각 세대의 층간 진동 소음 측정치를 초단위로 아파트 관리실에 실시간으로 전송한다. 한 세대의 측정치가 M값을 넘으면 세대 호수와 작은 경보음이 관리실 모니터에서 울린다. 한 세대의 N초동안의 실시간 측정치가 주어지면 최대 연속으로 경보음이 울린시간을 구하세요. 경보음이 없으면 -1이 출력된다.
입력
첫번째 줄에는 자연수 N과 M이 주어짐
두번째 줄에는 N개의 측정치값이 초 순서대로 입력된다.
#include <iostream> #include <string> using namespace std; int main(){ int N, M; cin >> N >> M; int count = 0; int max = -1; int input; int flag = 0; //flag가 1이면 연속중. 0이면 연속 아니라는 뜻. for(int i=0; i<N; i++){ cin >> input; if(input > M){ if(flag == 0){ flag = 1; count++; }else{ count++; } } else{ flag = 0; count = 0; } if(max < count){ max = count; } } if(max == 0){ cout << "-1" << endl; }else cout << max << endl; return 0; }
껌이군 후후후후
19. 분노 유발자
한줄에 앉은키 정보가 주어지면 뒷사람 모두의 시야를 가리는 사람이 몇명 있는지 출력하는 프로그램
입력
첫 줄에 앉은 학생수 N이 주어짐
두번째 줄에 N명의 앉은키 정보가 앞자리 학생부터 차례대로 주어진다.
#include <iostream> #include <string> #include <vector> using namespace std; int main(){ int N, input; vector<int> st; cin >> N; for(int i=0; i<N; i++){ cin >> input; st.push_back(input); } int cnt = 0; for(int i=0; i < st.size() - 1 ; i++){ int flag = 0; //flag가 0이면 뒤에 큰 수가 없다 1이면 뒤에 큰 수가 있다 for(int j = i+1; j < st.size(); j++){ if(st[j] > st[i]){ flag = 1; break; } } if(flag == 0){ cnt++; } } cout << cnt << endl; return 0; }
여기서 포인트는 flag
와 st.size()-1
부분이었다. 반복문을 한번 더 잘 생각해줘야 했던 문제!!
20. 가위 바위 보
A, B 두사람이 가위바위보를 한다. A가 이기면 A를 출력, B가 이기면 B를 출력하고 비기면 D를 출력한다.
입력
첫번째 줄에는 게임 횟수 N를 입력.
두번째 줄에는 A가 낸 가위, 바위, 보 정보 N개가 주어짐.
세번재 줄에는 B가 낸 가위, 바위, 보 정보 N개가 주어짐.
#include <iostream> #include <string> #include <vector> using namespace std; void match(int a, int b); int main(){ int N, input; vector <int> A; vector <int> B; cin >> N; for(int i=0; i<N; i++){ cin >> input; A.push_back(input); } for(int i=0; i<N; i++){ cin >> input; B.push_back(input); } for(int i=0; i<N; i++){ match(A[i], B[i]); } return 0; } void match(int a, int b){ if(a==b){ cout << "D" << endl; return; } if(a==1){ if(b==2) cout << "B" << endl; else cout << "A" << endl; //b==3 }else if (a==2){ if(b==1) cout << "A" << endl; else cout << "B" << endl; }else{ //a==3 if(b==1) cout <<"B" << endl; else cout << "A" << endl; } }
껌이라능 선생님은 어떻게 푸셨으려나?
'알고리즘 Algorithm ' 카테고리의 다른 글
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 26장 ~ 30장 (0) | 2020.06.17 |
---|---|
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 21장 ~ 25장 (0) | 2020.06.17 |
[Algorithm] 따라하며 배우는 인프런 강좌! 11강~15강 (0) | 2020.06.10 |
[Algorithm] 따라하며 배우는 인프런 강좌! 6강~10강 (0) | 2020.06.10 |
[algorithm] 그래프의 개념과 정의, 탐색 방법 (0) | 2019.12.01 |
댓글
이 글 공유하기
다른 글
-
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 26장 ~ 30장
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 26장 ~ 30장
2020.06.17 -
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 21장 ~ 25장
[Algorithm] 인프런 강좌 따라하며 배우는 알고리즘! 21장 ~ 25장
2020.06.17 -
[Algorithm] 따라하며 배우는 인프런 강좌! 11강~15강
[Algorithm] 따라하며 배우는 인프런 강좌! 11강~15강
2020.06.10 -
[Algorithm] 따라하며 배우는 인프런 강좌! 6강~10강
[Algorithm] 따라하며 배우는 인프런 강좌! 6강~10강
2020.06.10
댓글을 사용할 수 없습니다.