SSAFY/SWEA
[SWEA] 1954. 달팽이 숫자_파이썬
풀기 전 생각해보기😮 이차원 배열 상에서 인덱스 조건 주의하기 방향을 어떻게 설정해 줄 것인지 풀이🛫 T = int(input()) for t in range(T): N = int(input()) arr = [[0] * N for i in range(N)] col, row = 0, 0 v = 0 arr[col][row] = 1 dcol = [-1, 0, 1, 0] drow = [0, 1, 0, -1] for i in range(1, N**2+1): arr[col][row] = i col = col+dcol[v] row = row+drow[v] if col < 0 or row < 0 or N
[SWEA] #11014. 농작물 수확_파이썬
문제 💎 11014. 03_배열2_농작물 수확 * 문항 설명에 오류가 있다. 비용에 관해서 생각하지 말고, 밭을 나눠가졌을 때 가장 공평하게 가질 수 있는 값에 대해서만 생각하도록 한다. 입력으로 N X N 크기의 농장에 대한 정보가 2차 배열 형태의 값들이 주어진다. 주어진 값들은 각 셀에서 얻을 수 있는 농작물의 양이다. 수민, 기라, 현석 3형제는 농장을 3분할 해서 농작물을 나눠 가질 계획이다. 욕심많은 수민이 때문에 형제간 불화가 생기지 않도록 최대한 공평하게 나누어야 한다. 농장을 3분할 하는 방법은 가로선과 세로선을 그어서, 다음 그림과 같이 3개의 영역으로 나누는 것이다. 사각영역의 가로와 세로의 크기는 최소 1이상이어야 한다. 3 분할 했을 때 세 영역에서 얻을 수 있는 농작물 총합의 최..
[SWEA] #11010 대각 최대 합_파이썬
풀기 전 생각해보기😮 대각선에 위치한 값을 탐색하는 방법 주어진 이차원 배열 내에서 탐색 풀이🛫 T = int(input()) for t in range(T): N = int(input()) arr = [list(map(int, input().split())) for i in range(N)] # 탐색 방향 설정 : 2시, 4시, 8시, 10시 방향 순 cv = [-1, 1, 1, -1] rv = [1, 1, -1, -1] # 한 인덱스를 기점으로 대각선 값의 합을 담을 리스트 정의 li = [] for col in range(N): for row in range(N): # 해당 인덱스의 값 저장 idx_sum = arr[col][row] # 대각선에 위치한 값의 합 계산 for i in range(4)..
[SWEA] # 11012. 사각영역들의 합_파이썬
풀기 전 생각해보기😮 영역을 벗어난 곳을 계산해야 할 경우 어떻게 처리해야 할지 이미 계산된 곳을 계산하지 않으려면 어떤 처리를 해야 할지 풀이🛫 T = int(input()) for i in range(T): # 배열 생성 N, M = map(int, input().split()) arr = [list(map(int, input().split())) for i in range(N)] carr = [[True] * N for i in range(N)] answer = 0 # 정사각형 값의 합 구하기 for j in range(M): row, col, length = map(int, input().split()) s = 0 for c in range(length): for r in range(length)..
[SWEA] 10593. 가로세로 합_파이썬
풀기 전 생각해보기😮 가로열과 세로열의 합 탐색하기 중복되는 값 제거 풀이🛫 # 가로세로 합 T = int(input()) for t in range(T): N = int(input()) arr = [list(map(int, input().split())) for t in range(N)] answer = 0 row_list, col_list = [], [] # 가로열(행)의 합 리스트 구하기 for col in range(N): row_sum = 0 for row in range(N): row_sum += arr[col][row] row_list.append(row_sum) # 세로열(열)의 합 리스트 구하기 for row in range(N): col_sum = 0 for col in range(N)..
[SWEA] #1974. 스도쿠 검증_파이썬
풀기 전 생각해보기😮 이차원 배열 : 가로 탐색, 세로 탐색, 3x3 탐색 가로 탐색과 세로 탐색을 진행했을 때 이상이 없을 때, 모든 3x3 탐색(9번)을 진행해야 할까? 풀이🛫 T = int(input()) for _ in range(T): sdoku = [list(map(int, input().split())) for i in range(9)] li = [] check = 1 # 가로 탐색 for i in range(9): d = {} for j in range(9): if sdoku[i][j] not in d: d[sdoku[i][j]] = 1 else: d[sdoku[i][j]] += 1 for i in d: if d[i] > 1: check = 0 # 세로 탐색 for i in range(9)..
[SWEA] #1979. 어디에 단어가 들어갈 수 있을까_파이썬
풀기 전 생각해보기😮 이차원 배열 : 가로 방향, 세로 방향 탐색 퍼즐 공간이 세 글자일 때 vs 네 글자일 때 : ex) 0 0 0 1 1 vs 0 0 0 0 1 구분 퍼즐 내의 공간일 때 vs 퍼즐 경계가 포함된 공간일 때 : ex) 0 1 1 1 0 vs 0 0 1 1 1 구분 풀이🛫 T = int(input()) for _ in range(T): # N: 정사각형 퍼즐의 크기, K: 특정 단어 길이 N, K = map(int, input().split()) puzzle = [list(map(int, input().split())) for i in range(N)] fnd = 0 # 가로 기준 탐색 for i in range(N): l = 0 for j in range(N): if puzzle[i]..
[SWEA] #2001. 파리퇴치_파이썬
풀기 전 생각해보기😮 이차원 배열에서 파리채를 휘둘렀을 때 잡을 수 있는 파리 수 탐색 가능한 모든 경우의 수 탐색 풀이🛫 T = int(input()) for a in range(T): N, M = map(int, input().split()) arr = [list(map(int, input().split())) for i in range(N)] kills = [] # 파리채를 내려칠 곳 탐색 for i in range(N-M+1): for j in range(N-M+1): fly = 0 # 해당 위치를 타격했을 때 잡을 수 있는 파리의 수 탐색 for k in range(M): for l in range(M): fly += arr[i+k][j+l] kills.append(fly) # 배열 범위 안에서..
[SWEA] #4406. 모음이 보이지 않는 사람_파이썬, 리스트 특정 요소 모두 제거
풀기 전 생각해보기😮 리스트 내의 특정 값을 모두 지우는 방법 remove로 시도하면 특정 값 전체가 아닌, 하나만 지워지게 되는 현상이 발생 풀이🛫 #4406. 모음이 보이지 않는 사람 T = int(input()) mo = ['a','e','i','o','u'] for i in range(T): word = input() word = [i for i in word if i not in mo] print("#"+str(i+1), ''.join(word)) 핵심 정리🎁 리스트 내 특정 요소 모두 지우기 origin = 'congratulation' remove = ['a','e','i','o','u'] # list comprehension을 이용해 특정 요소 모두 제거 origin = [i for i i..
[SWEA] 2007. 패턴 마디의 길이_파이썬
풀기 전 생각해보기😮 주어진 문자열 속에서 반복되는 글자를 어떻게 찾을 것인가 글자가 몇번 반복했는지 확인하는 방법 풀이🛫 #2007. 패턴 마디의 길이 T = int(input()) for i in range(T): words = input() x = words[0] # x: 반복되는 글자 idx = 0 # idx: x의 길이, 풀이 기준 while True: idx += 1 if x == words[len(x):2*len(x)]: break else: x = words[:idx] print("#"+str(i+1),idx-1) 핵심 정리🎁 좋은 풀이였는지는 잘 모르겠지만 풀어본 방식을 소개해보겠다. 반복된 글자를 찾는다. 조건으로 주어지지 않았지만, 주어진 테스트 케이스를 통해 문자열은 반드시 반복되는..