• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

안녕하세요 격자판 회문수에서 질문있습니다.

21.05.19 13:11 작성 조회수 164

0

항상 강의 잘듣고있습니다.

격자판 회문수 문제를 강의 듣기전에 혼자 풀어봤는데 마지막 for문(세로로 확인하는 for문) 에서 

5자리숫자랑 뒤집어서 5자리 배열 이렇게 비교해서 맞으면 cnt를 증가하려고 rev함수를 만들었는데 왜 

마지막 for문에서 rev함수가 적용이 안되는지 궁금합니다 ㅠㅠ디버깅돌려봐도 revTmp = rev(tmp)

했을때 tmp에 있는배열이 뒤집어지면서 revTmp로 들어가야하는데  뒤집어 지지않고 그대로 들어갑니다 어디가 문제인가요..?ㅠㅠ

코드 중간에 print()문은 제대로 찍혔나 확인용으로 넣어본거입니다!

import sys
sys.stdin = open("input.txt","r")

def rev(rev):
    for i in range(len(rev)//2):
        rev[i],rev[-i-1] = rev[-i-1],rev[i]
    return rev



aList = [list(map(intinput().split()))for _ in range(7)]
cnt = 0

for i in range(7):
    for x in range(3):
        if aList[i][x:x+5] == rev(aList[i][x:x+5]): <====여기서는 잘 뒤집어 졌는데
            cnt += 1
            print(aList[i][x:x+5])
        else:
            continue

for i in range(7):
    for x in range(3):
        tmp = []
        for y in range(5):
            tmp.append(aList[y+x][i])
        revTmp = rev(tmp) <=================이부분입니다! 여기는 뒤집어 지지않고 그대로 들어가요 ㅠㅠ
        if tmp == revTmp:
            cnt +=1 
            print(tmp)

print(cnt)

답변 1

답변을 작성해보세요.

0

안녕하세요^^

tmp는 하나의 리스트이고, rev(rev)의 rev매개변수는 tmp주소를 받기 때문에 rev함수가 호출되면 tmp자체가 뒤집어집니다. 즉 rev와 tmp는 같은 메모리를 참조하고 있기 때문에  rev가 뒤집어지면 tmp도 뒤집어집니다. 

아래 코드를 문제에 있는 입력으로 출력해보시면 알 수 있을 겁니다.

import sys

sys.stdin = open("in1.txt","r")



def rev(rev):

    for i in range(len(rev)//2):

        rev[i],rev[-i-1] = rev[-i-1],rev[i]

    return rev





aList = [list(map(int, input().split()))for _ in range(7)]

cnt = 0



for i in range(7):

    for x in range(3):

        if aList[i][x:x+5] == rev(aList[i][x:x+5]):
            cnt += 1
        else:
            continue

print(cnt)
for x in aList:
    print(x)



for i in range(7):

    for x in range(3):

        tmp = []

        for y in range(5):
            tmp.append(aList[y+x][i])
            
        if i==0:
            print(tmp)   #원래 tmp

        revTmp = rev(tmp)

        if i==0:
            print(tmp) #리버스 되어 버린 tmp

        if tmp == revTmp:
            cnt +=1 


for x in aList:
    print(x)

print(cnt)