728x90
반응형
문제 설명
1이상 100이하의 숫자로만 이루어져 있는 n * n 크기의 격자 정보가 주어집니다.
이때 행복한 수열이라는 것은 다음과 같이 정의됩니다.
- 행복한 수열 = 연속하여 m개 이상의 동일한 원소가 나오는 순간이 존재하는 수열
n * n 크기의 격자 정보가 주어졌을 때 각 행마다 봤을 때 나오는 n개의 수열과, 각 열마다 봤을 때 나올 수 있는 n개의 수열을 포함하여 총 2n개의 수열 중 행복한 수열의 개수를 세서 출력하는 프로그램을 작성해보세요.
입력 형식
첫 번째 줄에는 격자의 크기를 나타내는 n과 연속해야 하는 숫자의 수를 나타내는 m이 공백을 사이에 두고 주어집니다.
두 번째 줄부터는 n개의 줄에 걸쳐 격자에 대한 정보가 주어집니다. 각 줄에는 각각의 행에 대한 정보가 주어지며, 이 정보는 1이상 100이하의 숫자가 각각 공백을 사이에 두고 주어집니다.
- 1 ≤ m ≤ n ≤ 100
출력 형식
2n개의 수열들 중 행복한 수열의 수를 출력해주세요.
코드
정답코드
#include <iostream>
using namespace std;
int arr[101][101] = {};
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
int cnt = 1;
int ans = 0;
int stn;
for (int i = 0; i < n; i++) {
cnt = 1;
for (int j = 0; j < n; j++) {
if (j == 0) {
stn = arr[i][j];
}
else {
if (stn == arr[i][j]) {
cnt++;
}
else {
cnt = 1;
stn = arr[i][j];
}
}
if (cnt == m) {
ans++;
break;
}
}
}
int stnCol;
for (int i = 0; i < n; i++) {
cnt = 1;
for (int j = 0; j < n; j++) {
if (j == 0) {
stnCol = arr[j][i];
}
else {
if (stnCol == arr[j][i]) {
cnt++;
}
else {
stnCol = arr[j][i];
cnt = 1;
}
}
if (cnt == m) {
ans++;
break;
}
}
}
cout << ans << "\n";
}
#1 틀린 시도 코드
#include <iostream>
using namespace std;
int arr[101][101] = {};
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
int cnt = 1;
int ans = 0;
for (int i = 0; i < n; i++) {
int stn = arr[i][0];
for (int j = 0; j < n-1; j++) {
if (arr[i][j] == arr[i][j + 1]) {
stn = arr[i][j];
cnt++;
}
else {
stn = arr[i][j + 1];
cnt = 1;
}
}
if (cnt == m) {
ans++;
}
}
728x90
반응형
'알고리즘 > 문제풀이 (C++,Kotlin)' 카테고리의 다른 글
[프로그래머스/Kotlin] Lv2 튜플 (1) | 2024.11.05 |
---|---|
[CodeTree/C++] 최고의 33위치 : 시뮬레이션 (0) | 2024.02.02 |
[BOJ/C++] 1946번 : 그리디 (0) | 2024.01.31 |
[BOJ/Kotlin] 2240번 자두나무 : DP (0) | 2023.11.14 |
[BOJ/Kotlin] 11659번 구간 합 구하기 4 : 누적합 (0) | 2023.09.20 |