728x90

Programming Language 33

[백준] 14502 연구소 파이썬

링크 : www.acmicpc.net/problem/14502 푸는 방법 해당 문제가 왜 브루트포스에 있는가부터 고민을 하다가 해결하게 되었습니다. 벽을 3개 설치한다는 것은 0으로 되어있는 빈 공간 중 3개를 설치하는 것을 의미하고, 0인 행렬 포지션들을 나열해서 그중 3개를 선택하는 순열을 이용했습니다 그 다음, 백트래킹을 이용해 바이러스가 퍼지는 알고리즘을 설계하여 퍼뜨린 후 그 내부 안에서 0의 숫자를 세서 순열 중에서 최고값을 반환하게 만들었습니다. 나름 가독성 있게 써봤는데, 만족하셨으면 좋겠네요 감사합니다 코드 import itertools import copy N, M = map(int, (input().split())) arr = [0 for x in range(N)] for i in r..

[백준] 18429 근손실 파이썬

링크 : www.acmicpc.net/problem/18429 푸는 방법 1. N일동안 A개의 운동을 선택해서 진행하므로, itertools를 이용해 순열을 생성합니다. 그리고, 이 경우가 할수 있는 운동의 최대 개수입니다. 2. N일동안 운동하는 중에, 근손실이 발생하면 안되므로 매일마다 운동량이 0보다 작아지는지 확인하고 만약 작아진다면 최대 개수에서 1개씩 뺍니다. 3. 전체 가능한 운동 개수에서 근손실이 발생한 경우를 뺀 나머지를 출력합니다. 코드 import itertools N, K = map(int, input().split()) A = list(map(int, input().split())) cases = list(itertools.permutations(A, N)) count = len(..

[백준] 2231 분해합 파이썬

링크 : www.acmicpc.net/problem/2231 푸는 방법 1. 숫자를 입력받고, 반복문을 돌며 한자리씩 나눕니다. 2. 각 자리수의 합과 수의 합이 입력받은 숫자와 같다면 생성자 리스트에 추가합니다. 3. 마지막으로 최소값을 반환합니다. 코드 N = int(input()) hap = list() for i in range(N): D = str(i) sum = 0 for x in D: sum += int(x) if sum + i == N: hap.append(i) if hap != []: print(min(hap)) else: print(0)

[백준] 14888 연산자 끼워넣기 파이썬

링크 : www.acmicpc.net/problem/14888 푸는 방법 가능한 연산의 경우를 순서대로 배열해야 되기 때문에, itertools 내부의 permutation(=순열)를 이용합니다. (itertools 라이브러리를 이용하면 편-안하게 다양한 경우의 수를 만들 수 있습니다) 1. 연산자들을 나란히 받아서 하나의 리스트로 합친 후, 다양한 순서 개수를 따져야 하므로 순열로 변환합니다. 2. 경우의 수마다, 하나씩 순차대로 연산을 진행 3. 진행한 값을 최소, 최대값과 비교해가며 갱신한뒤, 마지막으로 출력합니다. import itertools N = int(input()) numbers = list(map(int, input().split())) operators = list(map(int, i..

[백준] 3085 사탕게임 파이썬

링크 : www.acmicpc.net/problem/3085 푸는 방법 1. 입력을 받습니다. 2. 입력된 행렬 N x N 을 하나씩 다 탐색합니다. 3. 캔디를 옮겨보았을 때, 해당 행렬에 연속된 캔디숫자를 세고 반환합니다. 4. 반환한 연속된 캔디 개수를 최대값과 비교하며 갱신합니다. 코드 N = int(input()) candies = ['0' for x in range(N)] for i in range(N): candies[i] = [x for x in input()] def count_candy(x,y): row_count = 0 col_count = 0 max_count = 0 row_start = candies[0][y] col_start = candies[x][0] for i in rang..

[백준] 1912 연속합 파이썬

링크 : www.acmicpc.net/problem/1912 처음엔 쉬운줄 알고, 완전탐색 알고리즘으로 O(N^2)의 시간을 알고리즘을 짰더니 타임아웃 에러로 안 됐었습니다. 다 풀고나서 보니 알고리즘도 썩 좋지 않네요 ㅎㅎ (타임아웃 난 코드) N = int(input()) data_list = list(map(int, input().split()))[:N] sum_list = list() for i in range(N): max_sum = data_list[i] for j in range(1, N): if max_sum < sum(data_list[i:i+j]): max_sum = sum(data_list[i:i + j]) sum_list.append(max_sum) print(max(sum_list..

[백준] 14889 스타트와 링크 파이썬

링크 : www.acmicpc.net/problem/14889 푸는 방법은 다음과 같습니다. 1. 먼저 배열을 입력받습니다 2. 4번줄 cases는 N명을 각각 N/2, N/2로 나누었기 때문에 팀이 생길수 있는 경우의 수를 나열해야 합니다. 경우의 수를 나열하는데에는 itertools 라이브러리를 이용해 편하게 생성하였습니다. 저의 경우는 A팀을 생성하면 , 나머지가 B팀이 되도록 만들었습니다. (6명이라 하면, A팀으로 (0, 2, 4) 가 생성될 경우, 자동으로 B팀은 나머지인 (1,3,5)가 됩니다) 3. 최소격차는 임의로 큰 값을 넣어도 되는데, 행렬 1개의 cell 값이 100을 넘지 않는다길래, N*N*100이 최대값이라 생각하고 이보단 작을 거라 생각한 최대값을 넣었습니다. 4. 9번 줄에..

[Python] 사전(dict)형 정렬하기

dict_info = { 'A' : 65, 'B' :176, 'C' : 30, 'D' :135, 'E' : 50, 'F' :153, 'G' : 90, 'H' :171 } 1. Key 값만 정렬해서 출력 #1. key값만 알파벳 순서대로 정렬 sorted(dict_info) #1-1 역순일 경우, dict_info = sorted(dict_info, reverse=True) 2.Value 값만 정렬해서 출력 # Value의 값을 정렬해서 출력 dict_info = sorted(dict_info.values()) # 역순일 경우 dict_info = sorted(dict_info.values(), reverse=True) 3. Key값을 기준으로 사전형 전체를 출력 #3. Key값을 기준으로 dict를 정렬..

[Python] Albumentations를 이용한 데이터 증강 및 실험

안녕하세요 오늘은 Albumentations 라이브러리를 이용한 Data Augmentation 실험을 해보겠습니다 저는 아래와 같은 설정으로 실험을 진행하였습니다. Object Detection Model : EfficientDet-D2 Epochs : 100 해당 모델은 github.com/rwightman/efficientdet-pytorch 깃허브를 참조해 fine-tuning을 적용시켰습니다. 먼저 데이터로 전투기 1000장을 크롤링하여, 1) 100장 / 900장 2) 10 / 990 장 으로 두개의 폴더를 준비하였습니다. (이미지 크기는 제각각이지만, 블로그 포스팅을 위하여 사이즈를 변경하였습니다) 그리고 데이터를 증강시켜봐야겠죠?? github.com/albumentations-team/a..

[Python] GIL 관련 OS, 컴퓨터구조가 중요한 이유

안녕하세요 오늘은 그동안 프로그래밍을 하는 입장에서 하나둘씩 공부해보다가 제가 배운 걸 도움이 될까하여 씁니다. 평소에 단순하게 소규모의 코딩만 하다가 어느 순간 많은 데이터를 다루게 되면 속도 이슈가 나오게 되고, 고민해서 검색해보면 멀티프로세싱, 멀티쓰레드 쓰면 속도가 향상된다는 이야기가 나옵니다. 왜 멀티프로세스, 멀티쓰레드가 빠를까요?? 어떨 때 써야할까요?? 이런 얘기를 하다보면 자연스럽게 운영체제, 컴퓨터구조에 관한 이야기로 빠지게 됩니다. 기본적으로 알아야 할 것은 프로세스와 쓰레드의 차이입니다. 용어 설명부터 들어가보면, 프로세스는 컴퓨터 입장에서 실행되어 돌아가는 프로그램입니다. 쓰레드는 무엇일까요? 쓰레드는 프로세스 내부에서 동작하는 실행하는 흐름의 단위입니다. 프로세스 내부엔 쓰레드가..

728x90