백준 5218번 알파벳 거리 문제 링크입니다: https://www.acmicpc.net/problem/5218 간단한 문자열 처리 알고리즘 문제였습니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; for (int j = 0; j > A >> B; cout 알고리즘/BOJ 2018.10.27
백준 5598번 카이사르 암호 문제 링크입니다: https://www.acmicpc.net/problem/5598 변환 전 문자열이 주어지고 변환하라는 문제인줄 알았지만 사실은 변환된 문자열을 주고 변환 전 문자열로 만들라는 문제였습니다.문제를 꼼꼼히 읽어야한다는 교훈을 준 문제였습니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); string s, result; cin >> s; for (int i = 0; i < s.length(); i++) if (s[i] < 'D') result += s[i] - 'A' + 'X'; else result += s[i] - 'D' + 'A'; cout 알고리즘/BOJ 2018.10.27
백준 11656번 접미사 배열 문제 링크입니다: https://www.acmicpc.net/problem/11656 string의 substr 메소드만 잘 사용한다면 쉽게 풀 수 있는 문제였습니다. #include #include #include #include using namespace std; int main(void) { string s; cin >> s; vector v; for (int i = 0; i < s.length(); i++) v.push_back(s.substr(i, s.length())); sort(v.begin(), v.end()); for (int i = 0; i < v.size(); i++) cout 알고리즘/BOJ 2018.10.27
백준 1032번 명령 프롬프트 문제 링크입니다: https://www.acmicpc.net/problem/1032 흥미로운 문제였습니다. 알고리즘은 아래와 같습니다.1. 주어지는 문자열들의 길이는 모두 같지만 문자열의 길이를 모르므로 string result를 선언하여 첫 번째 문자열과 똑같이 저장합니다.2. 2번째부터 N번째 문자열을 첫번째 문자열과 비교해 다른 인덱스들을 모두 '?'으로 저장합니다.3. result을 출력합니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; string s; cin >> s; string result = s; for (int i = 1; i.. 알고리즘/BOJ 2018.10.27
백준 10808번 알파벳 개수 문제 링크입니다: https://www.acmicpc.net/problem/10808 진짜 간단한 문자열 처리 문제였습니다. #include #include using namespace std; int alphabet[26]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); string s; cin >> s; for (int i = 0; i < s.length(); i++) alphabet[s[i] - 'a']++; for (int i = 0; i < 26; i++) cout 알고리즘/BOJ 2018.10.27
백준 1316번 그룹 단어 체커 문제 링크입니다: https://www.acmicpc.net/problem/1316 간단한 문자열 처리 문제였습니다.prev 변수를 통해 기존 알파벳과 다른 알파벳이 나오는지 확인하고 해당 알파벳이 이미 등장했던 알파벳이면 그룹단어가 아니라고 체크해주면 됩니다. #include #include #include using namespace std; bool alphabet[26]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; int cnt = 0; for (int i = 0; i > s; ch.. 알고리즘/BOJ 2018.10.27
백준 5622번 다이얼 문제 링크입니다: https://www.acmicpc.net/problem/5622 간단한 문자열 처리 문제였습니다.스위치 문을 잘 이용하면 쉽게 풀 수 있는 문제였습니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); string s; cin >> s; long long result = 0; for (int i = 0; i < s.length(); i++) { switch (s[i]) { case 'A': case 'B': case 'C': result += 3; break; case 'D': case 'E': case 'F': result += 4; break; case '.. 알고리즘/BOJ 2018.10.27
백준 1152번 단어의 개수 문제 링크입니다: https://www.acmicpc.net/problem/1152 공백이 포함된 문자열이기 때문에 getline을 통해 입력받는 것이 핵심인 문제였습니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); string s; getline(cin, s); bool space = true; int cnt = 0; for (int i = 0; i < s.length(); i++) { if (s[i] == ' ') space = true; else if (space) { space = false; cnt++; } } cout 알고리즘/BOJ 2018.10.27
백준 1726번 로봇 문제 링크입니다: https://www.acmicpc.net/problem/1726 매우 흥미로운 BFS(Breadth First Search) 문제였습니다. 알고리즘은 아래와 같습니다.1. 그래프를 입력받고 시작점과 도착점을 입력받습니다.2. 평범한 BFS처럼 시작하지만 처음에는 해당 방향으로 1, 2, 3칸을 갈 수 있는지 반복문을 통해 확인합니다.i) 해당 방향으로 좌표를 이미 방문했다면 다음 칸을 확인합니다.ii) 해당 방향으로 가는 좌표가 막혀있을 경우 이후 칸도 못 가기 때문에 반복문을 탈출합니다.iii) 해당 방향으로 갈 수 있는 좌표들은 큐에 넣습니다.iv) 갈 수 있는 1, 2, 3칸 모두 횟수가 1번만 증가합니다.3. 이후에는 방향전환을 할 수 있는지 확인합니다.i) 180도 방향전환하.. 알고리즘/BOJ 2018.10.27
백준 2004번 조합 0의 개수 문제 링크입니다: https://www.acmicpc.net/problem/2004 숫자의 끝자리 0의 개수는 소인수 분해했을 때 min(2의 개수, 5의 개수)입니다.우선, 조합의 공식을 살펴봅니다.nCm = n! / (m!(n-m)!)이기 때문에 우리가 원하는 결과는 min(n!의 2의 개수 - m!의 2의 개수 - (n-m)!의 2의 개수, n!의 5의 개수 - m!의 5의 개수 - (n-m)!의 5의 개수)입니다.하지만 주어진 숫자는 최대 2,000,000,000이기 때문에 브루트 포스로 2의 개수와 5의 개수를 구한다면 TLE가 발생합니다.2와 5의 개수를 빠르게 구하기 위해서는 반복문을 조금 변형시켜야하는데 알고리즘은 아래와 같습니다. 알고리즘을 일반화시키기 위해 구하는 숫자를 i라고 하겠습니.. 알고리즘/BOJ 2018.10.18