알고리즘/BOJ 1235

백준 2138번 전구와 스위치

문제 링크입니다: https://www.acmicpc.net/problem/2138 재미있는 그리디 문제였습니다.N은 최대 100,000이기 때문에 단순 재귀 호출을 통해 풀려고 한다면 메모리초과가 발생합니다.따라서, 그리디하게 접근해야합니다. 알고리즘은 아래와 같습니다.1. 0번째 스위치를 누르지 않고 시작하는 경우와 0번째 스위치를 누르고 시작하는 경우로 나눕니다.2. 모든 경우를 재귀 호출하는 경우 메모리 초과가 나기 때문에 보고 있는 인덱스 직전의 전구 상태를 봅니다.- 인덱스를 한번 지나가면 다시 돌아오지 않기 때문에 확인하고 있는 (인덱스 - 1)에 위치한 전구의 상태를 보고 누를지 말지 결정합니다.a) (인덱스 - 1)에 위치한 전구의 상태와 만들고자하는 배열의 (인덱스 - 1)에 위치한 전..

알고리즘/BOJ 2018.11.01

백준 1411번 비슷한 단어

문제 링크입니다: https://www.acmicpc.net/problem/1411 예상외로 쉬운 문제였습니다.초기에는 비슷한 단어끼리의 그룹 중 최대 사이즈를 출력하는 줄 알았는데 그냥 비슷한 단어의 쌍을 구하면 되는 문제였습니다. #include #include using namespace std; const int MAX = 100; string s[MAX]; bool similar(int idx1, int idx2) { if (s[idx1].length() != s[idx2].length()) return false; char visited1[26] = { 0 }, visited2[26] = { 0 }; //알파벳이 동일하게 변환되는지 확인 for (int i = 0; i < s[idx1].len..

알고리즘/BOJ 2018.10.30

백준 1972번 놀라운 문자열

문제 링크입니다: https://www.acmicpc.net/problem/1972 간단한 문자열 처리 문제였지만 파싱에 유의해야하는 문제였습니다.각 단어마다 모든 가능한 D-쌍을 벡터에 넣어 중복되는지 확인하면 되는 문제였습니다. #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); while (1) { string s; cin >> s; if (s == "*") break; int len = 1; bool surprising = true; while (len < s.length()) { vector v; for (int i = 0; i < s.length(); i+..

알고리즘/BOJ 2018.10.30

백준 2897번 몬스터 트럭

문제 링크입니다: https://www.acmicpc.net/problem/2897 간단한 문자열 처리 문제였습니다.2*2씩 확인하면서 주차가 가능한지 파악하면 되는 문제였습니다. #include #include using namespace std; const int MAX = 50; string s[MAX]; int result[5]; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int R, C; cin >> R >> C; for (int i = 0; i > s[i]; for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { if (i < R - 1 && j < C ..

알고리즘/BOJ 2018.10.30

백준 2840번 행운의 바퀴

문제 링크입니다: https://www.acmicpc.net/problem/2840 COCI B번 문제 명성답게 예외처리가 까다로운 문제였습니다.대표적인 모순은 아래와 같이 두 가지입니다.1. 해당 인덱스에 '?'가 아닌 문자가 저장되어있는데 또 다른 문자가 저장된다고 하는 경우2. 룰렛에 중복이 되는 문자가 있으면 안되는데 중복이 발생하는 경우('?' 제외) 2가지 예외처리를 잘 처리하고 인덱스를 모듈러를 통해 시계방향으로 잘 전환하였다면 AC를 받을 수 있는 문제였습니다. #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N, K; cin >> N >> ..

알고리즘/BOJ 2018.10.29

백준 2816번 디지털 티비

문제 링크입니다: https://www.acmicpc.net/problem/2816 스페셜 저지 문제였으므로 여러가지 답이 허용되는 문제였습니다.따라서 저는 1번과 4번만을 이용해 풀었습니다. 알고리즘은 아래와 같습니다.1. 우선 KBS1과 KBS2가 몇 번째 인덱스에 위치하는지를 파악합니다.2. KBS1을 찾을 때까지 1번을 눌러 화살표를 내립니다.3. KBS1을 제일 위까지 4번을 통해 올립니다.4. KBS2를 찾을 때까지 1번을 눌러 화살표를 내립니다.(이 때, KBS1과 KBS2가 정렬되어있는지를 파악해서 적절하게 1번을 누릅니다.)5. 4번을 눌러 KBS2를 KBS1 바로 다음까지 올립니다. #include #include using namespace std; int main(void) { io..

알고리즘/BOJ 2018.10.28

백준 3613번 Java vs C++

문제 링크입니다: https://www.acmicpc.net/problem/3613 예외처리가 매우 까다로운 문제였습니다.대표적인 예외처리는 아래와 같습니다.1. 첫 번째 문자로 '_'나 대문자가 나오는 경우2. '_'가 연속으로 나오는 경우3. '_' 다음에 대문자가 나오는 경우4. 기존에 c++라고 인식했는데 대문자가 나오는 경우5. 기존에 java라고 인식했는데 _가 나오는 경우6. 마지막 문자로 '_'가 나오는 경우 #include #include using namespace std; int main(void) { string s; cin >> s; bool c = false, java = false, err = false; string result; for (int i = 0; i < s.len..

알고리즘/BOJ 2018.10.28