문제 링크 : https://www.acmicpc.net/problem/20125
틀린 코드
out of bounds 에러 뜸
#include <bits/stdc++.h>
using namespace std;
string arr[1001][1001];
int main(){
int n;
cin >> n;
/*
string p;
for (int i=1; i<=n; i++){
for (int j=0; i<=n; j++){
cin >> p;
if(p=="*"){
arr[i][j] = 1;
}
}
}
*/
int x, y;
while (true){
for (int i=1; i<=n; i++){
for (int j=0; i<=n; j++){
if (arr[i][j]=="*"){
x = i;
y = j;
break;
}
}
}
}
int a,b,c,d,e;
a=0;
b=0;
c=0;
d=0;
e=0;
while (true){
for (int i=y-1; i>0; i--){
if(arr[x][i]=="*")
a++;
else
break;
}
}
while (true){
for (int i=y+1; i<=n; i++){
if(arr[x][i]=="*")
b++;
else
break;
}
}
while (true){
for (int i=x+1; i<=n; i++){
if(arr[i][y]=="*")
c++;
else
break;
}
}
while (true){
for (int i=x+d+1; i<=n; i++){
if(arr[i][y-1]=="*")
d++;
else
break;
}
}
while (true){
for (int i=x+d+1; i<=n; i++){
if(arr[i][y+1]=="*")
e++;
else
break;
}
}
cout << x << y << '\n' << a << b << c << d << e;
return 0;
}
메모
- arr의 인덱스를 행 0~n, 열 0~n으로 두고, (1,1)은 arr의 행 1 열 1에 해당하도록 설계했는데 한 줄씩 입력받는 스트링 p는 인덱스 0부터 시작함을 고려하지 않았음. arr[i][j]=p[j-1]로 작성해야 되는데 arr[i][j]=p[i]로 잘못 작성했었음.
- 심장의 위치 저장해야 되는데 머리 위치 반환했음. x에 i+1을 넣어야 되는데 i를 넣었음.
- 배열 범위 잘 좀 생각해. 뭘 구한 건지 똑바로 봐.
- string 비교하는 조건문에서는 " " 사용, char 비교하는 조건문에서는 ' ' 사용해야 됨
- 초기값 설정해두면 값이 업데이트 됐는지 조건문으로 확인 가능. 여기서는 x=-1; 로 설정해뒀어서 심장의 위치를 찾았는지 확인하고 break; 쓸 수 있었음.
- 결과값 출력할 때 값들 사이에 공백을 둬야 한다는 조건 확인. 출력 형식 잘 확인해.
- while(true)문 남발했는데, for문만으로 해결 가능한 문제였음
맞힌 코드
#include <bits/stdc++.h>
using namespace std;
int main(void){
int n;
cin >> n;
char arr[1001][1001];
string p;
for (int i = 1; i <= n; i++) {
cin >> p;
for (int j = 1; j <= n; j++) {
arr[i][j] = p[j - 1];
}
}
int x = -1, y = -1;
// 심장의 위치
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (arr[i][j]=='*'){
x = i+1;
y = j;
break;
}
}
if (x != -1) break;
}
int a = 0, b = 0, c = 0, d = 0, e = 0;
// 왼쪽 팔 길이
for (int i = y - 1; i > 0; i--) {
if (arr[x][i] == '*')
a++;
else
break;
}
// 오른쪽 팔 길이
for (int i = y + 1; i <= n; i++) {
if (arr[x][i] == '*')
b++;
else
break;
}
// 허리 길이
for (int i = x + 1; i <= n; i++) {
if (arr[i][y] == '*')
c++;
else
break;
}
// 왼쪽 다리 길이
for (int i = x + c + 1; i <= n; i++) {
if (arr[i][y - 1] == '*')
d++;
else
break;
}
// 오른쪽 다리 길이
for (int i = x + c + 1; i <= n; i++) {
if (arr[i][y + 1] == '*')
e++;
else
break;
}
cout << x << " " << y << '\n';
cout << a << " " << b << " " << c << " " << d << " " << e;
}
'Algorithm' 카테고리의 다른 글
[프로그래머스] 42748번 K번째수 C++ (0) | 2024.11.12 |
---|---|
[프로그래머스] 1844번 게임 맵 최단거리 C++ (0) | 2024.11.11 |
[백준/BOJ] 9655번 돌 게임 C++ (0) | 2024.11.07 |
[소프티어/Softeer] 나무 공격 C++ (0) | 2024.11.01 |
[백준/BOJ] 2292번 벌집 C++ (0) | 2024.10.15 |