목록파이썬 (21)
코딩 공부

'ㅜ' 모양을 제외한다면, 일반적인 dfs로 4칸을 차지하는 모양을 만들어 그 칸들의 합을 구한 뒤, answer을 sm의 최댓값으로 갱신한다. 'ㅜ' 모양을 따로 고려하여 answer을 갱신해준다. def dfs(n, ci, cj, sm): global answer if n == 4:# 4칸의 도형이 만들어졌다면 return answer = max(answer, sm) return for di, dj in ((-1, 0), (0, 1), (1, 0), (0, -1)): ni = ci + di nj = cj + dj if 0

삼차원 주사위를 굴린다고 생각하니 너무 어렵게 느껴져 전개도로 접근해봐야겠다. 동서남북마다 주사위의 상태를 정리하여 전개도를 그려본다. 3. 각 명령의 순서대로 주사위를 이동시키고, 범위에서 벗어나지 않을 경우에만 주사위의 좌표, 전개도를 바꾸고(change 함수 이용) 상황에 맞춰 바닥면 및 주사위면을 복사시키고, 주사위의 윗면을 출력한다. def change(d): # 주사위 전개도 변경 if d == 1: dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3] elif d == 2: dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4] elif d ==..

우선 초기 시험관에 있는 바이러스들의 정보를 virus라는 리스트에 담은 후 종류 번호가 큰 것부터 작은 순으로 정렬시킨다. S초 동안 바이러스의 전염을 시킨다. 정렬된 virus에서 pop을 해 꺼내보면 종류 번호가 작은 것부터 꺼내지므로 꺼내서 전염시키고 새로 퍼진 바이러스는 new_virus라는 리스트에 담는다. 1초간 전염이 끝나면 new_virus에 있는 바이러스들을 위의 1번처럼 정렬시키고 virus로 전환시킨다. N, K = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(N)] S, X, Y = map(int, input().split()) virus = [] # 초기 시험관 속에 있는 바이러..

시뮬레이션 유형의 문제이므로 문제에서 설명한 그대로 구현하도록 한다. 사과가 있는 칸을 나타내기 위해 board에 주어진 사과 좌표를 이용해 1로 표기해둔다. 방향 전환 정보를 info라는 딕셔너리 형태(info = {X:C})에 담는다. 이때 X는 숫자, C는 문자 형태임에 유의한다. 한 칸 바라보고 있는 방향으로 이동하면서 벽이나 몸에 이동할 경우 반복문을 break하여 빠져나오고 사과가 있는 칸이라면 사과를 먹고(board[ni][nj] = 0) 몸을 늘린다. 사과가 없는 칸이라면 몸을 늘리고 꼬리를 당긴다(snake맨앞 정보 지우기). 기준 좌표를 재설정한다.(si, sj = ni, nj) info를 통해 방향을 바꿔야하는 turn인지 체크하고 해당 시 변경할 수 있도록 한다. N = int(in..

모든 가능한 경우의 수를 살펴봐야 하므로 '백트래킹'임을 추론한다. [조건]에 유의한다. - 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 구성 - 알파벳이 증가하는 순서로 암호 배열 먼저 알파벳을 sort로 정렬해놓고, 백트래킹을 통해 암호의 길이가 L이면서 모음(count)이 1개 이상이면서 자음(C-count)이 2개 이상일 경우, 그 암호를 출력하도록 한다. (모음인 알파벳을 선택할 경우 count + 1을 해준다.) def dfs(n, word, count): if n == C: if len(word) == L and count>0 and C-count>=2: print(word) return if candidates[n] in vowels: # 선택한 알파벳이 모음일 ..

시뮬레이션 유형이므로 문제에 나와있는 과정 그대로 코드를 구상하도록 한다. 끝과 끝이 이어진 격자임을 고려하여 [1]번 과정에서 이동된 구름의 위치i, j를 각각 N으로 나눠준다. [2]번 과정에서는 위에서 구한 이동된 구름(new_cloud)의 위치에 비의 양을 +1 해준다. [3]번 과정(구름 사라짐)은 따로 구현할 것은 없고, 이후 과정에서 구름의 위치들이 사용되므로 지우지 않음에 유의한다. [4]번 과정에서는 각 구름 좌표의 대각선에 물이 들어있는 바구니 수(count)를 세야하므로 ↖,↗,↙,↘ 방향의 물 존재 여부를 카운트하여 각 좌표의 물의 양에 값을 물이 들어있는 바구니 수를 더해준다. [5]번 과정에서 구름을 새로 생성해야 하므로 좌표의 값이 2이상(arr[i][j]>=2), 좌표가 ne..