1. '#'이 나오는 좌표 x, y 의 최대 및 최소를 이용하여 생기는 문제입니다.
##...
.##..
.....
####.
.####
위 예제를 입력으로 넣을 시, x_max, x_min, y_max, y_min의 값이 각각 4, 0, 4, 0으로 나오게 됩니다.
결국 '#'이 처음 나온 위치와 마지막으로 나온 위치를 이용해 계산하기 때문에, 저런 입력이 들어올 경우 잘못된 좌표 값을 가지고 함수의 인자로 들어가게 됩니다.
2. 'cream'과 'la' 가 의미하는 것이 무엇인지 잘 모르겠습니다.
3. check_heart() 내의 if문이 이상합니다.
###..
###..
#####
#####
.####
'la'회 동안 반복하는 동안 해당 조건을 단 한번이라도 만족하면 1을 반환합니다.
위 예제를 입력으로 넣을 시, 현재 x_max, x_min, y_max, y_min의 값이 각각 4, 0, 4, 0 이므로
array[0+i][0+i] == '.' or \
array[0+i][4-i] == '.' or \
array[4-i][0+i] == '.' or \
array[4-i][4-i] == '.'
중간에 'or'를 넣었기 때문에 해당 좌표 값들 중에 '.'이 하나라도 있다면 1을 반환하게 됩니다.
위 예제에서 [0][4]와 [4][0]의 값이 '.'이기 때문에 결과가 1이 됩니다.
일단 좌표값을 parameter로 보내기 전에 먼저 라떼아트가 정사각형 모양의 틀을 이루고 있는지 확인해야 될 것 같습니다.
그 후 check_heart() 내 if문을 조금 손보시면 될 것 같습니다.
예제가 필요하시다면 아래 글을 참고해주세요.
https://www.acmicpc.net/board/view/110826
아래는 위 예제의 결과 및 if row[j] == '#'를 만족할 시 x_max, x_min, y_max, y_min의 값을 출력한 것입니다.
gci787 1년 전
배열 크기를 입력받고 해당 배열의 하트모양이 있는지 확인하는 문제입니다.
하트라는 모양이 인정 받으려면 크림이 있는 정사각형에서 한쪽이 정사각형으로 비어 있으면 하트로 인정 받을 수 있습니다.
check_heart함수를 통해 한쪽 끝의 빈곳이 있는지 확인하고 만일 비었다면 1을 반환 아니면 2를 반환하게 하였는데
3% ~ 5%에서 오답처리가 되었습니다. 알려주시면 감사하겠습니다.