supergrammer   3년 전

S전자 문제 복기를 하기 위해 문제를 풀었습니다.

그런 이유로 파이어볼이 아닌 Planets 로 변수명을 설정하였습니다.

기본적인 아이디어는 Map 을 N * N 배열 각각의 원소를 리스트로 구현하여 파이어볼의 위치를 표시하고, 이의 정보를 Planets 라는 리스트에서 가지고 있게끔 하는 방식입니다.

move() 에서는 리스트의 파이어볼을 모두 검사해 이동시키고, 맵 상에서 이동시킵니다.

그 아래의 collide() 는 Map[i][j] 의 크기가 2 이상이 되면 충돌이 일어나게 되고, 이를 처리하는 함수입니다. d가 홀수라면 Odd = True, 짝수라면 Even = True 상태가 되고, 아래에서 Odd and Even 을 검사하여 파이어볼이 퍼져나가는 방향을 결정하게 됩니다.

이 방식이 제가 역량테스트에서 문제를 풀었던 방식입니다.

그런데 3일째 문제를 푸는데도 0% 에서 틀렸습니다가 출력되는데 혹시 제가 놓치는 부분이 있을까요??

물론 역량테스트를 풀 당시에는 10개 TC 모두 통과했습니다.

고수님들의 조언 부탁드립니다.

danimartinwife   3년 전

저도 인터넷에 정답이라고 올리신 분 코드랑 비교해보니 전체적인 로직은 같았습니다. 그래서 대각선일때 잘못 처리했나 싶어서 댓글 달았는데 질문주신분께서 맞게 본거라고 말씀하셨구요. 불필요한 속도 게산 반복문은 나머지연산자로 처리했습니다.

supergrammer   3년 전

@danimartinwife

올려주신 코드 읽어봤는데 저랑 로직이 똑같은거 같습니다...

같이 해결되었으면 좋겠습니다 ㅠㅠ

jigns153   3년 전

@danimartinwife @supergrammer

57~62번 줄에 0보다 작을 때는 있는데 맵의 크기를 넘었을 때(N을 넘었을 때)의 처리는 하셨나요?

supergrammer   3년 전

@jigns153

제 코드 48, 49 라인, @danimartinwife 님의 코드 55 라인에 보면

mod N 연산이라 N 이상의 값에 대해서는 체크할 필요가 없어서 굳이 하지 않는 걸로 보입니다.

kcan1416   3년 전

supergrammer 님의 소스에서는 13번줄에서 s % N 이 아니라 s로 바꿔주시고 

danimartinwift 님의 소스에서는 2개 이상의 파이어볼을 합칠때 방향들이 모두 짝수인지 홀수인지 판단하는 부분만 고쳐주시면 됩니다

supergrammer   3년 전

@kcan1416

혹시 이유를 여쭈어 봐도 되겠습니까?? 우선 신기하게 맞았습니다...

supergrammer   3년 전

생각해 보니까 그렇네요... S / 합쳐진 파이어볼의 개수니까...

S & N 을 해서는 안되는 문제였네요...

씁쓸합니다...

danimartinwife   3년 전

@kcan1416 헉..!! 방향을 모두 더해서 합이 짝수면 모두 홀수거나 모두 짝수겠지라고 생각했는데 멍청하게 (0, 1, 3, 2...)도 합은 짝수네요ㅋㅋㅋ 괜히 요령피우다가 틀렸었군요ㅠㅠ 덕분에 해결했습니다. 감사합니다😊😊

supergrammer   3년 전

감사 인사 못 전한거 같아서 늦게나마 감사 인사 전해드립니다.

문제 풀이에 도움을 주신 @kcan1416 님 정말로 감사합니다.

gunhokim   2년 전

문제풀이에 힌트를 주신 @kcan1416님 감사드립니다.

저도 요령피우다가 틀렸었네요.. 두개 이상에서 합칠 때 모두 짝홀인지 생각해야하는군요

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