알고리즘/BOJ 1235

백준 2810번 컵홀더

문제 링크입니다: https://www.acmicpc.net/problem/2810 간단한 문자열 처리 문제였습니다.핵심은 컵홀더 개수를 구하는 것이 아니라 컵홀더를 쓰는 사람의 수를 구하는 것였습니다! #include #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; int cnt = 1; //처음에는 무조건 컵홀더가 있다 int L = 0; for (int i = 0; i < s.length(); i++) if (s[i] == 'S') cnt++; else { L++; if (L == 2) { cnt++; L =..

알고리즘/BOJ 2018.10.28

백준 9536번 여우는 어떻게 울지?

문제 링크입니다: https://www.acmicpc.net/problem/9536 버퍼를 비워주는 것이 핵심이였던 문제였습니다. 알고리즘은 아래와 같습니다.1. 테스트 케이스 수를 입력받은 뒤 버퍼를 비워줘야 울음소리를 getline을 통해 정상적으로 입력됩니다.2. 어떤 동물이 어떻게 우는지가 문자열로 주어지므로 map을 통해 울음소리만 저장해줍니다.3. 끝에 문자열이 "say?"라면 질의이므로 문자열을 그만 입력받습니다.4. 이제 1번에서 입력받은 울음소리를 쭉 탐색하며 map에 저장되어있지 않은 울음소리들을 벡터에 넣습니다.5. 벡터의 내용물을 출력해주면 됩니다! #include #include #include #include #include using namespace std; int main(..

알고리즘/BOJ 2018.10.28

백준 5525번 IOIOI

문제 링크입니다: https://www.acmicpc.net/problem/5525 직관적으로 O(N^2)으로 풀면 TLE가 발생하는 문제입니다.따라서, 시간 복잡도를 O(N)으로 줄여야합니다. 핵심은 O의 개수를 통해 Pn인지를 파악하는 것이였습니다.물론, OO와 같이 예외가 발생할 수 있으므로 조건문을 통해 OI가 연속으로 등장하는지 파악합니다.검사할 때 첫 번째로 등장한 O는 이후에는 안 쓰이므로 다음 Pn을 검사할 때는 해당 O는 제외함으로써 시간 복잡도 O(N)으로 문제를 풀 수 있습니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N, len; string..

알고리즘/BOJ 2018.10.28

백준 1062번 가르침

문제 링크입니다: https://www.acmicpc.net/problem/1062 문제를 잘 못 파악해서 정말 많이 고민했던 문제였습니다.처음에는 각각의 단어들을 개별적으로 봐서 익힐 수 있는 단어들의 수를 세는 줄 알았지만 문제의 의도는 K개의 알파벳을 배웠을 때 동시에 배울 수 있는 단어들의 수의 최댓값을 구하는 것이였습니다. 알고리즘은 아래와 같습니다.1. 우선, anta와 tica는 무조건 포함됩니다. 따라서, 'a', 'c', 'i', 'n', 't'는 무조건 포함되므로 K가 5 미만이라면 절대 단어를 배울 수 없습니다.2. 접두사로 anta, 접미사로 tica가 무조건 포함되므로 단어를 입력받을 때, 접두사와 접미사를 제거해줍니다.3. 재귀를 통해서 문제를 풀어야하는데 우선 'a', 'c',..

알고리즘/BOJ 2018.10.28

백준 2804번 크로스워드 만들기

문제 링크입니다: https://www.acmicpc.net/problem/2804 알파벳이 겹치는 y, x를 찾는 것이 핵심인 문제였습니다.이후에는 조건에 맞게 출력해주면 됩니다. #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); string a, b; cin >> a >> b; //겹치는 y, x 찾는 것이 핵심 int y = 0, x = 0; for (int i = 0; i < a.length(); i++) { bool searching = true; for(int j=0; j

알고리즘/BOJ 2018.10.27

백준 10769번 행복한지 슬픈지

문제 링크입니다: https://www.acmicpc.net/problem/10769 간단한 문자열 처리 문제였습니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); string s; getline(cin, s); int happy = 0, sad = 0; for (int i = 0; i < s.length(); i++) { if (i < s.length() - 3 && s[i] == ':' && s[i + 1] == '-' && s[i + 2] == ')') happy++; else if (i < s.length() - 3 && s[i] == ':' && s[i + 1] ==..

알고리즘/BOJ 2018.10.27

백준 9996번 한국이 그리울 땐 서버에 접속하지

문제 링크입니다: https://www.acmicpc.net/problem/9996 알고리즘은 아래와 같습니다.1. *를 기준으로 앞 뒤를 각각 a와 b 문자열에 저장합니다.2. 주어진 문자열과 a를 비교해서 같은지를 판단합니다. 이후에 b와 비교를 할 때 인덱스가 중복방문되면 안되기 때문에 visited 배열을 통해 표시해줍니다.3. 주어진 문자열과 b를 비교하는데 조건이 성립되도 중복방문되면 성립하지 않는 것입니다.4. 2와 3 모두 통과하면 DA 둘 중 하나라도 통과 못하면 NE를 출력합니다. #include #include #include using namespace std; bool visited[100]; int main(void) { ios_base::sync_with_stdio(0); ci..

알고리즘/BOJ 2018.10.27

백준 1718번 암호

문제 링크입니다: https://www.acmicpc.net/problem/1718 평문은 getline을 통해 받아야하는 것과 평문의 인덱스를 모듈러 연산을 통해 조절해야하는 것만 조심하면 쉽게 풀 수 있는 문제였습니다. #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); string s, key; getline(cin, s); cin >> key; string result; int idx = 0; for (int i = 0; i < s.length(); i++) { if (s[i] == ' ') result += ' '; else if ((s[i] - '0') - (key[idx..

알고리즘/BOJ 2018.10.27

백준 2998번 8진수

문제 링크입니다: https://www.acmicpc.net/problem/2998 주어진 이진수의 길이를 3의 배수로 만든 후 3개씩 끊어서 계산하면 되는 문제였습니다. #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); string s; cin >> s; //길이를 3의 배수로 만든다 while (1) { if (s.length() % 3 == 0) break; s = '0' + s; } string result; for (int i = s.length() - 3; i >= 0;) { //세 개씩 끊어서 계산 result += ((s[i] - '0') * 4 + ..

알고리즘/BOJ 2018.10.27