BOJ 57

[백준] 1018번: 체스판 다시 칠하기 | C++ 풀이

# 문제 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8*8 크기는 아무데서나 골라도 된다. 지민이가 다시 칠해야 하는 정사각형의 최소 개수를 구하는 프로그램을 작성하시오. # 풀이 문제를 잘 읽자 100번 깜지 쓰겠습니다. 그냥 다시 색칠 보자마자 예전에 과제로 구현했던 코드 풀이랑 비슷할 것 같아 냅다 요상망측하게 구현하고 테스트 케이스 넣어보고 깨달았습니다. 8*8이라고요... 여러가지로 따져볼 게 있었던 브루트포스 문제다. 생각을 열심히 하면서 풀어보자. 바로 정답 소스코드부터 확인! #include #include using namespace std; // 비교할 체스판 문양 2개를 미리 s..

백준/C++ 2023.06.28

[백준] 2231번: 분해합 | C++ 풀이

# 문제 두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오. # 풀이 이번에도 브루트포스 문제다. 모든 경우를 탐색한다고 생각하면 오히려 구현하기가 쉬우니 천천히 생각하며 풀어보자. 바로 정답 소스코드 확인! #include using namespace std; int decompositionSum(int n); int main(){ int n; cin >> n; int m = 1; bool print = 0; while(m < n){ if(n == decompositionSum(m)){ print = 1; cout 0){ sum += n%10; n /= 10; } return sum; } 분해합을 구해주는 decompositionSum함수를 먼저 살펴보자. int 타입을 반환하..

백준/C++ 2023.06.27

[백준] 2798번: 블랙잭 | C++ 풀이

# 문제 N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오. # 풀이 solved.ac 클래스 2에 속하고 백준 단계별 풀이로는 브루트 포스에 해당하는 문제! 정답 소스코드를 보며 필요한 개념을 정리해보자. 우선 브루트포스 알고리즘이란 완전탐색 알고리즘이다. 즉, 모든 경우의 수를 전수조사하여 정답을 찾아낸다. 어떻게 보면 가장 기본적이고도 핵심적인 방법이지만, 코드 수행시간이나 메모리 측면에서 효율이 떨어진다. 그래도 다른 효율적인 해결 방법을 알아보기 위해서라면 꼭 한번쯤 생각해보고 넘어가야 하는 단계! 바로 정답 소스코드를 확인해보자. #include using namespace std; int main(){ int n, m; c..

백준/C++ 2023.06.26

[백준] 10250번: ACM 호텔 | C++ 풀이

# 문제 여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다. # 풀이 복잡해보이지만 천천히 뜯어보면 어렵지 않은 문제다. 정답 소스코드를 확인하기 전, 방이 어떤 순서로 배정되는지 살펴보자. 손님의 선호에 관한 정보는 다음과 같다. 손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸..

백준/C++ 2023.06.25

[백준] 8958번: OX퀴즈 | C++ 풀이

# 문제 OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. # 풀이 입출력 버퍼 공부를 다시 해야겠다 느끼게 해준 문제... 왜냐? cin.ignore() 까먹었기 때문... 정답 소스코드를 바로 확인해보자! #include using namespace std; int main(){ ios_base::sync_with_stdio(false);// 두 표준 입출력 동기화 해제 cin.tie(NULL);// 입력과 출력 묶음을 풀기 int n; cin >> n; cin.ignore(); // 개행 버퍼 비우기 string str; while(n--){ getline(cin, str); int scoreSum = 0; int score = 1; for(int i=0; i

백준/C++ 2023.06.24

[백준] 2920번: 음계 | C++ 풀이

# 문제 연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오. # 풀이1 코드가 간단한 문제에 비해 길고 복잡한 것 같다. 아이디어가 떠오르면 무조건 그 방식을 고집해 푸는 것 좀 고치고 싶은데... 다방면으로 사고를 열도록 노력해야겠다. 구글링해서 찾아본 다른 방법까지 총 두 개의 방법을 포스팅한다. 우선 첫번째로 풀었던 정답 소스코드부터! #include using namespace std; int main(){ int num; cin >> num; if(num == 1){ for(int i=2; i> num; if(i != num){ cout > num; if(i != num){ cout

백준/C++ 2023.06.23

[백준] 2577번: 숫자의 개수 | C++ 풀이

# 문제 세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오. # 풀이 목표로 했던 11단계까지 풀이는 마쳤고, solved.ac 기준 Class 1을 달성하기 위해 남은 문제들을 풀고 있다. 그래서 다시 간단한 문제들로 복귀! 정답 소스코드를 바로 확인해보자. #include using namespace std; int main(){ ios_base::sync_with_stdio(false);// 두 표준 입출력 동기화 해제 int a, b, c; cin >> a >> b >> c; int product = a*b*c; int num[10] = {0}; while(product>0){ num[produ..

백준/C++ 2023.06.22
728x90