switch_num = int(input()) # 스위치 개수 switch_state = list(map(int, input().split())) # 스위치 상태 student = int(input()) # 학생 수 student_info = [list(map(int, input().split())) for _ in range(student)] # 학생 성별과 받은 숫자 for i in range(student): # 학생 수만큼 반복 num = student_info[i][1] # 현재 학생이 받은 숫자 if student_info[i][0] == 1: # 남학생이라면 for j in range(switch_num): # 스위치 개수만큼 반복 if (j+1) % num == 0: # 스위치 번호가 nu..
# 제일 바깥쪽 1줄을 큰 사각형이라고 하고 회전, 그 안쪽 사각형 회전... n, m, r = map(int, input().split(' ')) graph = [list(map(int, input().split(' '))) for _ in range(n)] for _ in range(r): # 회전 수만큼 반복 for i in range(min(n, m) // 2): # 사각형 개수 s_x, s_y = i, i # 맨 처음 좌표 지점 s_value = graph[s_x][s_y] # 맨 처음 좌표가 가진 값 for j in range(i + 1, n - i): # 좌 s_x = j prev_value = graph[s_x][s_y] # 현재 좌표값 graph[s_x][s_y] = s_value # 현..
n = int(input()) room = [list(input()) for _ in range(n)] w, h = 0, 0 # 가로/세로로 누울 수 있는 자리 for i in range(n): temp_w = '' # 빈칸이 연속해있는지 확인하기 위한 임시 변수 temp_h = '' for j in range(n): # 가로 if room[i][j] == '.': # 빈칸일경우 임시변수에 추가 temp_w += '.' else: # 빈칸이 아닐경우(X) if len(temp_w) >= 2: # 2칸 이상인지 체크 w += 1 temp_w = '' # 임시 변수 비우기 # 세로 if room[j][i] == '.': temp_h += '.' else: if len(temp_h) >= 2: h += 1 t..
n, m = map(int, input().split()) board = [list(input()) for _ in range(n)] coloring = [] for a in range(n - 7): # 8*8의 범위 지정 for b in range(m - 7): w_idx = 0 # 흰색으로 시작할 경우 색칠되어야 하는 개수 b_idx = 0 # 검은색으로 시작할 경우 색칠되어야 하는 개수 for i in range(a, a + 8): # 시작 지점 for j in range(b, b + 8): # 시작지점 if (i + j) % 2 == 0: # 인덱스의 합이 짝수일때. 짝수는 시작값과 같아야하니까. if board[i][j] != 'W': # B라면 w_idx += 1 # W로 칠하기(흰색으로 시작..
arr = [list(map(int, input().split())) for _ in range(9)] max_dict = {} for i in range(len(arr)): max_dict[i] = max(arr[i]) max = max(max_dict.values()) for i in max_dict.keys(): if not max in arr[i] : continue else: print(max) print(i + 1, arr[i].index(max) + 1) exit() # 구현할때 반복문을 여러번 돌려야하는건 맞는것같아서 반복하는 수를 줄여주려고 했음 # max_dict에 각 줄의 최대값을 담아줌 = 줄수만큼만 반복 # max에 최대값 구함 # max_dict에서 최대값이 있는 줄을 찾음. 그..
n, m = map(int, input().split()) arr1 = [list(map(int, input().split())) for _ in range(n)] # 행렬A arr2 = [list(map(int, input().split())) for _ in range(n)] # 행렬B result = '' # 결과값 변수 for i in range(n): for j in range(m): result += f"{arr1[i][j] + arr2[i][j]} " print(result) result = '' 행렬A와 B를 받아와서 이중 for 문으로 인덱스가 같은 요소들을 더해 문자열 변수에 넣어주고 출력해주었다. https://www.acmicpc.net/problem/2738 2738번: 행렬 덧셈..
파이썬의 이차원 배열에 대해서 배울 수 있었다. 이차원 배열은 리스트 안에 리스트가 있는 형태이다. arr1 = [list(map(int, input().split())) for _ in range(n)] 이런 식으로 리스트 컴프리헨션을 사용해 입력값들을 이차원 배열로 만들어줄수도 있다. 백준으로 문제를 풀때마다 느끼는 거지만 입력값을 가져와서 어떻게 넣어주는지도 중요한 것 같다. 이차원 배열과 관련된 알고리즘 문제들을 풀면서 어렵다는 생각을 많이 한다. 그래도 해야지 뭐 어쩌겠음! new! 이차원 배열에서 최대값을 구해줄때 max함수 안에 max함수를 넣어줄수 있다는 걸 새로 알게 되었다. arr = [ [1, 2, 3] [4, 5, 6] [7, 8, 9] ] max_num = max(map(max, ..
# 서브태스크 1만 충족 n = int(input()) m = int(input()) s = input() target = 'I'+'I'.join('O' * n)+'I' cnt = 0 for i in range(m): if s[i:i+len(target)] == target: cnt += 1 print(cnt) # 100점 n = int(input()) m = int(input()) s = input() count, idx, result = 0, 0, 0 while idx < (m-1): if s[idx:idx+3] == 'IOI': idx += 2 count += 1 if count == n: result += 1 count -=1 else: idx += 1 count = 0 print(result) ..
n = int(input()) enter, out = {}, [] cnt = 0 for i in range(n): enter[input()] = i for _ in range(n): out.append(input()) for j in range(n): for k in range(j+1, n): if enter[out[j]] > enter[out[k]]: cnt += 1 break print(cnt) https://www.acmicpc.net/problem/2002 2002번: 추월 입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이 www.a..
str = sorted(input()) letter_dic = {} start = '' mid = '' for i in str: if i in letter_dic: letter_dic[i] += 1 else: letter_dic[i] = 1 if len(list(filter(lambda x: x % 2 == 1,letter_dic.values()))) >= 2: print("I'm Sorry Hansoo") exit() for key, value in letter_dic.items(): if value % 2 != 0: mid += key start += key * (value // 2) else: start += key * (value // 2) print(start + mid + start[::-1]..