```
백준14647번 (가장 9가 많은 열 혹은 행 찾아서 전체 9 숫자에서 빼기) C++로 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 14647번 풀이
- 배열에서 특정수가 가장 많이 나오는 열이나 행 찾기
https://www.acmicpc.net/problem/14647
14647번: 준오는 조류혐오야!!
첫째 줄에 직사각형 빙고판의 크기를 뜻하는 n(1 ≤ n ≤ 500)과 m(1 ≤ m ≤ 500)이 주어진다. 다음 줄부터 n개의 줄에 걸쳐 각 줄마다 m개의 숫자들이 주어진다. 이는 크기가 n×m인 짝꿍의 빙고판의
www.acmicpc.net
백준 14647번 준오는 조류혐오야!는
난이도 쉬움 등급의 문제로서
배열을 입력받고 그 배열안에서
행과 열을 기준으로 가장 많이 9가 나오는 열 또는 행을 찾고
전체 9의 갯수에서 방금 찾은 행 또는 열의 9 빈도수 값을 뺴주면 되는 문제입니다.
9가 나온다는 것은 99 일경우 2개 999일 경우 3개 이런식으로 카운팅 합니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
일단 값을 입력받습니다
void getInputFromUser()
{
getRowAndColumnFromUser();
getTilesFromUser();
}
void getRowAndColumnFromUser()
{
std::string inputStr;
std::getline(std::cin, inputStr);
std::stringstream ss(inputStr);
ss >> rowNumber;
ss >> columnNumber;
}
void getTilesFromUser()
{
boardTiles = new int* [rowNumber];
for (int i = 0; i < rowNumber; i++)
{
std::string inputStr;
std::getline(std::cin, inputStr);
std::stringstream ss(inputStr);
boardTiles[i] = new int[columnNumber];
for (int j = 0; j < columnNumber; j++)
{
int tempVal;
ss >> tempVal;
boardTiles[i][j] = countNine(tempVal);
}
}
}
여기서 저는 값을 입력 받을때
행렬안에
9의 빈도수를 계산해서 넣었습니다.
9의 빈도수 계산은 아래의 함수를 이용하였습니다.
int countNine(int num)
{
int retVal = 0;
while (num > 0)
{
if (num % 10 == 9)
{
retVal++;
}
num = num / 10;
}
return retVal;
}
그 다음 행 과 열을 각각 비교해주면서
열계산할때
겸사 겸사 전체 값도 계산 하였습니다.
void printResult()
{
/* 행 비교 */
for (int i = 0; i < rowNumber; i++)
{
int tempVal = 0;
for (int j = 0; j < columnNumber; j++)
{
tempVal = tempVal + boardTiles[i][j];
}
maxGoo = std::max(maxGoo, tempVal);
}
/* 열 비교 및 전체 값 계산*/
for (int i = 0; i < columnNumber; i++)
{
int tempVal = 0;
for (int j = 0; j < rowNumber; j++)
{
totalGoo = totalGoo + boardTiles[j][i];
tempVal = tempVal + boardTiles[j][i];
}
maxGoo = std::max(maxGoo, tempVal);
}
/* 맞을 댓수*/
std::cout << (totalGoo - maxGoo);
}
전체 코드는 다음과 같습니다
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <algorithm>
#include<numeric>
// https://www.acmicpc.net/problem/3252
class CBingo
{
private:
/* 행 */
int rowNumber;
/* 열 */
int columnNumber;
/* 보드 타일들 */
int** boardTiles;
/* 9의 총개수 */
int totalGoo;
/* 최대 9를 가진 열 또는 행의 갯수*/
int maxGoo;
public:
CBingo()
{
this->totalGoo = 0;
this->maxGoo = 0;
}
~CBingo()
{
/* 메모리 관리 */
for (int i = 0; i < rowNumber; ++i)
{
delete[] boardTiles[i];
}
delete[] boardTiles;
}
void getInputFromUser()
{
getRowAndColumnFromUser();
getTilesFromUser();
}
void getRowAndColumnFromUser()
{
std::string inputStr;
std::getline(std::cin, inputStr);
std::stringstream ss(inputStr);
ss >> rowNumber;
ss >> columnNumber;
}
void getTilesFromUser()
{
boardTiles = new int* [rowNumber];
for (int i = 0; i < rowNumber; i++)
{
std::string inputStr;
std::getline(std::cin, inputStr);
std::stringstream ss(inputStr);
boardTiles[i] = new int[columnNumber];
for (int j = 0; j < columnNumber; j++)
{
int tempVal;
ss >> tempVal;
boardTiles[i][j] = countNine(tempVal);
}
}
}
int countNine(int num)
{
int retVal = 0;
while (num > 0)
{
if (num % 10 == 9)
{
retVal++;
}
num = num / 10;
}
return retVal;
}
void printResult()
{
/* 행 비교 */
for (int i = 0; i < rowNumber; i++)
{
int tempVal = 0;
for (int j = 0; j < columnNumber; j++)
{
tempVal = tempVal + boardTiles[i][j];
}
maxGoo = std::max(maxGoo, tempVal);
}
/* 열 비교 및 전체 값 계산*/
for (int i = 0; i < columnNumber; i++)
{
int tempVal = 0;
for (int j = 0; j < rowNumber; j++)
{
totalGoo = totalGoo + boardTiles[j][i];
tempVal = tempVal + boardTiles[j][i];
}
maxGoo = std::max(maxGoo, tempVal);
}
/* 맞을 댓수*/
std::cout << (totalGoo - maxGoo);
}
void printMyMap()
{
for (int i = 0; i < rowNumber; i++)
{
for (int j = 0; j < columnNumber; j++)
{
std::cout << boardTiles[i][j];
}
std::cout << "\n";
}
}
};
int main()
{
std::cin.tie(NULL);
std::ios::sync_with_stdio(false);
CBingo* cBingo = new CBingo();
cBingo->getInputFromUser();
cBingo->printResult();
//cBingo->printMyMap();
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩하시길 바랍니다 ~ :)
참조 및 인용
C++ Primer
Introduction to Algorithms
https://codemasterkimc.tistory.com/35
C++ 이론을 배울수 있는 곳 정리
개요 C++을 배우는 책, 강의, 블로그, 링크 등을 공유합니다. (링크 및 간략한 설명을 하였으나 만약 원작자가 링크를 거는것을 원치 않을 경우 연락주시기 바랍니다.) 서적 https://www.amazon.com/Prime
codemasterkimc.tistory.com
https://codemasterkimc.tistory.com/50
300년차 개발자의 좋은 코드 5계명 (Clean Code)
이번 글을 통해 배워갈 내용 좋은 코드(Clean Code)를 작성하기 위해 개발자로서 생각해볼 5가지 요소를 알아보겠습니다. 개요 좋은 코드란 무엇일까요? 저는 자원이 한정적인 컴퓨터 세상에서 좋
codemasterkimc.tistory.com
'C++ > C++ 알고리즘' 카테고리의 다른 글
| 백준 17548번 Greetings C++로 구현해보기 (0) | 2021.08.31 |
|---|---|
| 백준 14648번 쿼리 맛보기 C++로 구현해보기 (0) | 2021.08.31 |
| 백준14645번 와이버스 부릉부릉 C++로 구현해보기 (0) | 2021.08.30 |
| 백준 21964번 선린인터넷고등학교 교가(마지막5글자 구하기) C++로 구현해보기 (0) | 2021.08.30 |
| 백준3252번 JANICA C++로 구현해보기 (0) | 2021.08.30 |