gci787   1년 전

배열 크기를 입력받고 해당 배열의 하트모양이 있는지 확인하는 문제입니다.

하트라는 모양이 인정 받으려면 크림이 있는 정사각형에서 한쪽이 정사각형으로 비어 있으면 하트로 인정 받을 수 있습니다.

check_heart함수를 통해 한쪽 끝의 빈곳이 있는지 확인하고 만일 비었다면 1을 반환 아니면 2를 반환하게 하였는데

3% ~ 5%에서 오답처리가 되었습니다. 알려주시면 감사하겠습니다.

hyika   1년 전

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년 전

알려주셔서 감사합니다

댓글을 작성하려면 로그인해야 합니다.