목록전체 글 (152)
호기심 많은 분석가
코딩테스트 연습 - 위장 programmers.co.kr from functools import reduce def multiply(arr) : return reduce(lambda x, y : x*y, arr) def solution(clothes): answer = {} for name, spe in clothes : if spe not in answer : answer[spe] = set() answer[spe].add(name) return multiply([len(answer[i])+1 for i in answer])-1 내 풀이 이 문제는 살짝의 수학이 동반되면 쉬워진다. 모든 옷의 경우 입냐, 입지 않냐의 2가지의 경우로 나누어진다. 상의가 n가지 있을 경우 고르는 n가지와 입지 않는 1가지..
코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr def solution(phone_book): answer = True phone_book.sort() for i in range(len(phone_book)-1) : if phone_book[i] == phone_book[i+1][:len(phone_book[i])]: return False return answer 우선 sort 문법을 통해 배열을 앞자리 크기 순으로 정렬해준다. 그러면 ["12", "124", "1235"] -> ["12", "1235"..
코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr from collections import Counter def solution(participant, completion): ans = Counter(participant)-Counter(completion) answer = list(ans.elements())[0] return answer 처음 봤을 때 가장 먼저 Counter 문법을 떠올리긴 했지만, Counter 결과끼리 뺄셈 연산이 되는지 몰라서 for문으로 풀었다. for문은 역시..
우리는 구글 드라이브를 쓰면서 협업을 할 때 공유 문서함을 사용하기도 한다. 그 공유 문서함을 내 드라이브에 추가시키면서 로컬에서도 사용하고 싶은데 업데이트가 되면서 드라이브에 바로가기 추가는 생겼지만 내 드라이브에 추가 기능이 없어졌다. 우리는 1번 형태로 추가되기를 바라는데 현재는 2번 형태로만 추가가 된다. 2번 형태의 경우 로컬로 동기화가 안되는데 이것을 어떻게 해결할 수 있을까? 바로 공유 문서함의 폴더를 누르고 Shitf+Z를 사용해주면 우리가 원하는 1번 형태로 추가가 된다.
ubuntu에서 모델을 돌려둔 뒤 프로그램을 종료하더라도 계속 돌아가게 해보자 파일 목록 확인 $ ll 메모리 사용 확인 $ top | $ htop 작업중인 프로그램 표시 $ ps -ef | grep python 파일 내용 확인 $ vi /[파일명/] 내용 수정 (Insert) $ i 수정 후 저장하고 파일 벗어나기, 저장하지 않고 벗어나기 수정 후 저장하고 파일 벗어나기 - ESC를 눌러서 Insert에서 나와줘야 함 $ :wq 저장하지 않고 파일만 벗어나기 $ :q 프로그램 강제 종료 $ kill -9 /[PID (프로세스 ID)/] 프로그램 화면을 끄더라도 계속 작업 $ nohup python test/_while.py &
11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net from sys import stdin n = int(stdin.readline()) ans_list = list(map(int, stdin.readline().split())) ans_list = sorted(ans_list) result = 0 for i in range(len(ans_list)): result += ans_list[i]*(len(ans_list)-i) print(result) 요번 문제는 깔끔히 잘 풀었다고 생각한다. 핵심은 최대한 덜 기다리기 위해 인출하는 데 시간이 짧..
9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net from sys import stdin n = int(stdin.readline()) ans_list = [int(stdin.readline().strip()) for _ in range(n)] arr = [0]*12 arr[1]=1 arr[2]=2 arr[3]=4 for i in range(4, 12) : arr[i] = arr[i-1]+arr[i-2]+arr[i-3] for ans in ans_list : print(arr[ans]) 이번 문제도 점화식을 세우면 가볍게 해결할 수 있었다. $$ A_n = A_{n-1} + A_{n-2} + A_{n-3} $..
2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net from sys import stdin n = int(stdin.readline()) graph = [list(map(int, stdin.readline().split())) for _ in range(n)] white, blue = 0, 0 def get_block(x,y,n) : global white, blue color = graph[x][y] for i in range(x, x+n): for j in range(y, y+n) ..
2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net from sys import stdin com_dic = {} for i in range(int(stdin.readline())) : com_dic[i+1] = set() for _ in range(int(stdin.readline())) : temp = list(map(int, stdin.readline().split())) com_dic[temp[0]].add(temp[1]) com_dic[temp[1]].add(temp[0]) def dfs(start, com_..
1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 이번 문제는 굉장한 스토리텔링이 있는 문제기에 접속하여 읽어보면 재밌을 듯하다. import sys n, m = map(int, sys.stdin.readline().split()) dogam = [sys.stdin.readline().rstrip() for _ in range(n)] dogam_dic = {} for i in range(len(dogam)) : dogam_dic[dogam[i]] = i+1 for i in range..