[PYTHON/파이썬] 1652 누울 자리를 찾아라- 함수이용

    https://www.acmicpc.net/problem/1652

     

    1652번: 누울 자리를 찾아라

    첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.

    www.acmicpc.net

     

    (좌)가로 누울 자리/ (우)세로 누울 자리 

    문제 풀이

    • 누울 자리의 조건
      1. 연속 2칸 이상이고
      2. 벽이나 짐에 닿아야 한다.
    • 가로와 세로의 누울 자리를 구해야 한다.
      • 누울자리를 구하는 함수를 만든다.
      • 행과 열을 바꿔 누울 자리를 구하는 함수에 인자로 넣는다.(세로 누울 자리)
    • 행렬의 요소 하나씩 순회한다.
    • 한 행 순회 시작
      • 'X'를 만나기 전까지 bed를 하나씩 추가한다.
      • 만약 'X'를 만난다면,
        • bed가 2개 이상이면 카운팅을 세주고
        • bed를 초기화 한다.
    • 한 행 순회를 끝나고 bed가 2개 이상이면 카운팅을 해준다.

    solution - 성공

    import sys
    n = int(sys.stdin.readline().strip())
    matrix = [list(sys.stdin.readline().strip()) for _ in range(n)]
    
    # 행렬의 누울자리(bed라고 지칭함)를 반환하는 함수
    def bed_count(matrix,n):
        cnt = 0
        for i in range(n):
            bed = 0
            for j in range(n):
              if matrix[i][j] == '.':
                  bed += 1
              else: # 'X' 만났을때
                  if bed >= 2: # bed가 2개 이상이면
                      cnt += 1 # 카운트 하나 세주고
                  bed = 0 # bed를 초기화 해준다.
            # 만약 한 행의 탐색이 끝나고 bed가 2개 이상이면 카운트를 하나 추가한다.       
            if bed >= 2:
                cnt += 1
        return cnt
    
    # 세로 자리는 열과 행을 바꾸어 함수에 넣어 반환함.
    print(bed_count(matrix,n),bed_count(list(zip(*matrix)),n))
    행과열이바뀐_matrix = list(zip(*matrix))
    
    '''
    print(matrix)
    [
      ['.', '.', '.', '.', 'X'],
      ['.', '.', 'X', 'X', '.'],
      ['.', '.', '.', '.', '.'],
      ['.', 'X', 'X', '.', '.'],
      ['X', '.', '.', '.', '.']
    ]
    
    print(list(zip(*matrix)))
    [
      ['.', '.', '.', '.', 'X'],
      ['.', '.', 'X', 'X', '.'],
      ['.', '.', '.', '.', '.'],
      ['.', 'X', 'X', '.', '.'],
      ['X', '.', '.', '.', '.']
    ]
    '''

    댓글