1215. [S/W 문제해결 기본] 3일차 - 회문1

기록하는 용도·2022년 5월 16일
0

처음 떠올렸던 아이디어는
1. 테스트케이스(10)만큼
2. 찾을 길이(length)를 입력받고
3. board에 8x8이 완성되도록 입력을 우선 받는다.
4. for문을 돌면서 현재 돌아가고있는 위치와(board[a][b]) 그 위치에서 length를 더했을때 똑같은 문자를 발견한다면
5. 새로운 for문을 통해 length만큼 또다시 돌면서 회문인지 확인하는 방식

이 방법으로 한시간 넘게 씨름했는데 반복문만 추가가되고,
결국 5번에서 좋지 않은 방법임이 확실하다고 느껴져서 다시 생각해보았다.

처음 아이디어에서는 한문자를 리스트로 나눠버렸는데(['C','B','C','A']형식으로)
새로 시도했을때는 문자열로 받았다.

문제에서 가로, 세로만 확인하면 되므로 가로 for문, 세로 for문으로 따로 확인하도록 했다.

8개의 가로줄을 확인하면서, 일단 length만큼 잘라서 그 자른 문자열을 새로 선언하고, for문으로 회문인지 확인하도록했다.

for i in range(10):
    length = int(input())
    board = []
    for _ in range(8):
        board.append((input()))
    
    
    tot=0
    for a in range(8):
        string = board[a]
        for b in range(8):
            new = string[b:b+length]
            cnt=0
            if (len(new)) == length:
                for c in range(length):
                    if new[c] == new[-(c+1)]:
                        cnt+=1
                if cnt==length:
                    tot+=1

    board2 = []
    for a in range(8):
        ap =''
        for b in range(8):
            ap+=board[b][a]
        board2.append(ap)

    for a in range(8):
        string = board2[a]
        for b in range(8):
            new = string[b:b+length]
            cnt=0
            if (len(new)) == length:
                for c in range(length):
                    if new[c] == new[-(c+1)]:
                        cnt+=1
                if cnt==length:
                    tot+=1                    

    print("#{0} {1}".format(i+1,tot))

내 풀이와 다른 사람의 풀이를 비교해보니, 내가 아직 파이썬의 특징을 정확히 파악해서 써먹으려는것이 매우 부족하다고 느꼈다.
다음에 복습해볼땐 슬라이싱을 사용해봐야겠다.

0개의 댓글