컴퓨터 & 코딩/Python 24

[Python] Advent of Code 2022 - Day 11

원숭이가 갖고 있는 아이템들이 문제에 제시된 조건에 맞게 다른 수로 바뀐 후 다른 원숭이에게 넘겨주는 과정을 반복한다. 각 원숭이마다 총 몇 개의 아이템들이 거쳐갔는지 계산하고 그 중 가장 큰 횟수 두 개를 곱해주면 되는 문제였다. import math file = open("input/day11.txt", "r") data = file.read().splitlines() monkeys_list = [] temp = [] count = 0 # 1 for line in data: if line == "": monkeys_list.append(temp) temp = [] elif line != "": temp.append(line.strip()) monkeys_list.append(temp) monkeys_..

[Python] Advent of Code 2022 - Day 10

이번 인풋데이터는 addx N(정수)와 nood로 구성 된 프로그램이 들어있었고 addx N은 cycle이 두 번 일어나고, cycle이 끝날 때 value가 N만큼 더해지는 반면 nood는 cycle이 한 번 일어나는 것 외에 다른 동작은 하지 않는다. 인풋 데이터의 프로그램을 돌렸을 때 20번째, 60번째, 100번째, 140번째, 180번째, 220번째 사이클에서의 value 값을 구해내어 각각의 사이클값과 곱한 값을 총 더 해주면 몇이 되는지 구해야 한다. file = open("input/day10.txt", "r") data = file.read().splitlines() program_proceeds = [] for line in data: program_proceeds.append(line..

[Python] Advent of Code 2022 - Day 9

head가 인풋에 따라 위치를 이동하는데 이에 따른 tail의 경로를 파악하여 tail이 훑고간 위치가 총 몇 군데 되는지 계산하는게 이번 과제의 문제였다. 문제를 처음 봤을 때는, 리스트로 하나의 필드를 만들어서 움직임을 줘야하나 했지만 인덱스가 늘어날 때마다 요소를 하나씩 추가하는 게 까다로울 것 같아서 head와 tail의 좌표만 리스트로 담아놓았다. pos[0]은 x좌표를, pos[1]은 y좌표를 나타낸다. file = open("input/day9.txt", "r") data = file.read().splitlines() motions_list = [] # split for motion in data: motions_list.append(motion.split()) head_pos = [0, ..

[Python] Advent of Code 2022 - Day 8

Part One 아주 지저분하게 풀어서 자신은 없지만 일단 풀이과정을 써본다. 이번 과제는 99x99의 숫자열이 있다. 각 숫자들은 나무의 키를 나타낸다. 이때 동서남북으로 얼마나 많은 나무가 보이는지 세는 문제이다. 동서남북으로 본인보다 키(숫자)가 크거나 같은 나무(숫자)가 있다면 보이지 않는다. file = open("input/day8.txt", "r") trees_list = file.read().splitlines() tree_list = [] temp = [] # 1 for trees in trees_list: for tree in trees: temp.append(int(tree)) tree_list.append(temp) temp = [] tree = None left = [] right..

[Python] Advent of Code 2022 - Day 7

Part One 이번 인풋에는 폴더를 탐색하는 커맨드가 한 줄 씩 적혀있고, 현재 읽고 있는 폴더 트리에서 폴더의 크기가 100,000 이하인 것들의 데이터 크기의 합을 구해내는 게 이번 과제이다. 일단 파일경로를 파악하기 위해 폴더 트리를 만들어야 했고 어떤 데이터 타입으로 만들까 하다 nested dictionary로 정하였다. 단순히 값을 나열해야하는 게 아니라 어떤 경로를 가진 어떤 폴더에 얼만큼의 파일이 있는지 알아내야 했기 때문이다. 예시에 나온 폴더로 예상 폴더 트리의 모습을 짜보자면, nested_dict = { "a": { "e": { "i" : 584 }, "f": 29116, "g": 2557, "h.lst" : 62596 }, "b.txt": 14848514, "c.dat": 850..

[Python] Advent of Code 2022 - Day 6

Part One 일련의 알파벳들로 구성된 엄청 긴 한 줄의 string자료를 앞에서부터 네 개 씩 묶어보며, 그 네 개의 알파벳들 중 겹치는 알파벳이 존재하는 지 (예: ['a', 'b', 'b', 'c']) 확인하고 모든 알파벳이 다르게 구성되어있는(예: ['a', 'b', 'c', 'd']) 가장 첫 번째 지점의 "인덱스+1" 를 구하는 문제이다. file = open("input/day6.txt", "r") letters_data = file.read() check = [] # 1 for i in range(4): check.append(letters_data[i]) # 2 for j in range(len(letters_data) - 4): if len(set(check)) != 4: del ch..

[Python] Advent of Code 2022 - Day 5

Part One 각 숫자 라인에 담겨있는 요소들이 정해진 순서에 따라 정해진 개수가 왔다갔다 해야하는 과제. 최종적으로 가장 윗라인에 있는 알파벳들을 읽어내야 한다. (예: 현재 위의 표에서는, FFQJWWFBW) file = open("input/day5.txt", "r") crates_data = file.read().splitlines() # 1 temp_list = [] crates_list = [] a = 1 for j in range(9): for i in range(0, 8): if crates_data[i][a] != " ": temp_list.append(crates_data[i][a]) crates_list.append(temp_list) a += 4 temp_list = [] # 2 ..

[Python] Advent of Code 2022 - Day 4

매 라인마다 두 숫자 그룹(ex. 1-4, 6-10)이 있고, 한 숫자 그룹이 다른 숫자 그룹에 완전히 속해있는 경우(ex. 3-5, 1-10)가 총 몇 개 있는지 알아내는 문제. Part One file = open("input/day4.txt", "r") data_list = file.read().splitlines() pairs_list = [] # 1 for data in data_list: list = data.split(",") pairs_list.append(list) temp_number_list = [] new_pairs_list = [] # 2 for pairs in pairs_list: for pair in pairs: number = pair.split("-") temp_number..

[Python] Advent of Code 2022 - Day 3

Part one 대문자/소문자 알파벳이 섞인 string들을 다 반 씩 나누고 그 각각의 절반에 공통으로 들어있는 알파벳을 구해내어, 알파벳에 해당하는 숫자값들의 합을 구하는 문제. import string # 1 file = open("input/day3.txt", "r") rucksacks_list = file.read().splitlines() character_list = [] # 2 for rucksack in rucksacks_list: first, second = rucksack[:len(rucksack)//2], rucksack[len(rucksack)//2:] # 3 for character in first: if character in second: character_list.appen..

[Python] Advent of Code 2022 - Day 2

문제: 엘프들과 내가 가위바위보를 해야한다. 어떤 엘프가 나에게 공략집을 주었고 그 공략집에는 엘프들이 낼 것과 내가 내야할 것들이 적혀있다. 다음과 같은 점수체계가 적용되고 공략집에 써져있는 대로 게임이 진행된다면 나는 몇 점을 얻을 것인가? 엘프들이 내는 것: A(바위), B(보), C(가위) 내가 내는 것: X(바위), Y(보), Z(가위) 점수 = 내가 낸 것 + 승패 내가 낸 것: 바위(1점), 보(2점), 가위(3점) 승패: 승(6점), 비김(3점), 패(0점) 일단 경우의 수들을 하나하나 다 계산해보았다. A X (draw) = 1 + 3 = 4 A Y (win) = 2 + 6 = 8 A Z (lose) = 3 + 0 = 3 B X (lose) = 1 + 0 = 1 B Y (draw) = 2..

320x100