| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- level2
- level3
- 컴퓨터 비전
- 이분탐색
- 동적계획법
- c++
- dp
- BFS
- lv2
- 자바
- 최적화
- 코틀린
- 2018 KAKAO BLIND RECRUITMENT
- 임베디드
- dfs
- Stack
- C
- 누적합
- cpp
- 우선순위큐
- 백준
- 컴퓨터비전
- JavaScript
- 다이나믹프로그래밍
- 프로그래머스
- java
- 다이나믹 프로그래밍
- kotlin
- 그리디
- 구현
Archives
- Today
- Total
코드를 느껴바라
13022번 : 늑대와 올바른 단어 [C++] 본문
문제 링크
성공 여부(걸린 시간): 성공 (19분 12초)
아이디어
오랜만에 빡구현 문제를 풀다가 아직 C++ 문자열이나 여타 다른 문법에 미숙함을 깨닫고 기본에 충실하고자 풀어보았다.
문제의 요구사항은 다음과 같다.
단어가 주어졌을때 올바른 단어인지 아닌지 1, 0으로 출력하는 것이다.
올바르다의 기준은
- 임의의 양의 정수 n에 대해서, 'w'가 n번 나오고, 그 다음에 'o'가 n번, 그 다음에 'l'이 n번, 그 다음에 'f'가 n번 나온 단어는 올바른 단어이다.
- 올바른 단어 두 개를 이은 단어도 올바른 단어이다.
- 1번과 2번 조건으로 만들 수 있는 단어만 올바른 단어이다.
이 세가지인데
나는 우선 같은 알파벳이 연달아오면 해당 알파벳으로 압축시켜주었다.
그리고 압축시키는 과정에서 w가 아님에도 바로 전 압축전 길이와 현재 같았던 알파벳 연속의 길이가 다르면
틀린 단어이므로 0을 출력하고 종료를 해주었다.
만약 압축을 무사히 완료하고 압축된 문자열을 4씩 끊어서 wolf와 대조하고 만약 한번이라도 틀린 것이 나오면 0
그것이 아니고 제대로 종료되면 1을 출력하게 되도록 짰다.
풀이코드
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
string word;
cin >> word;
//simple 문자열에 중복된 알파벳의 압축 버전을 넣는다.
string simple = "";
int pre_len = 1;
for (int i = 0; i < word.length(); ) {
int same_len = 1;
for (int j = i + 1; j < word.length(); j++) {
if (word[i] != word[j]) {
break;
}
else {
same_len++;
}
}
if (word[i]!='w' && pre_len != same_len) {
cout << 0;
return 0;
}
simple = simple + word[i];
i += same_len;
pre_len = same_len;
}
if (simple.length()%4!=0) {
cout << 0;
return 0;
}
else {
for (int i = 0; i < simple.length(); i+=4) {
if (simple.substr(i, 4) != "wolf") {
cout << 0;
return 0;
}
}
}
cout << 1;
return 0;
}반응형
'PS > 백준(Baekjoon)' 카테고리의 다른 글
| 2623번 : 음악프로그램 [C++] (0) | 2026.02.26 |
|---|---|
| 1135번 : 뉴스 전하기 [C++] (1) | 2026.02.02 |
| 2473번 : 세 용액 [C++] (4) | 2026.01.30 |
| [보안] 자동차 사이버보안 트렌드, ISO/SAE 21432 (0) | 2026.01.28 |
| 2295번 : 세 수의 합 [C++] (2) | 2026.01.25 |
