-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
안녕하세요 격자판 회문수에서 질문있습니다.
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(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
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)
답변을 작성해보세요.
0
김태원
지식공유자2021.05.21
안녕하세요^^
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)
답변 1