백준 [1105] "팔"

Kimbab1004·2024년 2월 7일
0

Algorithm

목록 보기
4/102


처음에는 문제가 잘 이해되지 않았다.

L과 R이 주어진다. 이때, L보다 크거나 같고, R보다 작거나 같은 자연수 중에 8이 가장 적게 들어있는 수에 들어있는 8의 개수를 구하는 프로그램을 작성하시오.

-> 어? 그러면 8이 되겠네? 라고 생각했지만

1과 10사이의 8이 분명히 존재할텐데 출력이 0으로 나와 문제를 이해하는데 꽤 오랜 시간이 걸렸다. 결국 다른 사람들의 풀이를 보았고 이내 알 수 있었다.

그런데 풀이를 이해하고 문제 해결에 문제가 없었음에도 계속 틀렸다는 문제가 나와 상당히 애를 먹었는데. CPP의 이해가 부족해 생긴 문제였다.

#include <iostream>
#include <deque>
#include <string>
#include <sstream>
#include <algorithm>

using namespace std;


int main(void) {
	
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	string L, R;
	cin >> L >> R;
	int count = 0;
//################
//#문제가 생긴 부분#
//################
if (L.length() != R.length()) {
		cout << 0;
	}

	else {
		for (int i = 0; i < L.length(); i++) {
			if (L[i] == R[i] && L[i] == '8') {
				count++;
			}
			else if (L[i] != R[i])
				break;
		}

	}

	cout << count;

	return 0;
	}

0을 반환하면서 return으로 종료시켜야 했었는데 이를 하지 않거나 break; 을 사용하는 방식을 사용했다. 이를 알아차리지 못하고 여러 반례 찾아보고 꽤 애를 먹었는데 기본기 수련을 지속적으로 해야 할 것 같다.

정답 코드

#include <iostream>
#include <deque>
#include <string>
#include <sstream>
#include <algorithm>

using namespace std;


int main(void) {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	string L, R;
	cin >> L >> R;
	int count = 0;


	if (L.length() != R.length()) {
		cout << 0;
		return 0;
	}
	else {
		for (int i = 0; i < L.length(); i++) {
			if (L[i] == R[i] && L[i] == '8') {
				count++;
			}
			else if (L[i] != R[i])
				break;
		}
	}

	cout << count;

	return 0;
}

0개의 댓글