본문 바로가기

Algorithm

(9)
[프로그래머스] 가장 많이 받은 선물 문제 선물을 직접 전하기 힘들 때 카카오톡 선물하기 기능을 이용해 축하 선물을 보낼 수 있습니다. 당신의 친구들이 이번 달까지 선물을 주고받은 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하려고 합니다. 두 사람이 선물을 주고받은 기록이 있다면, 이번 달까지 두 사람 사이에 더 많은 선물을 준 사람이 다음 달에 선물을 하나 받습니다. 예를 들어 `A`가 `B`에게 선물을 5번 줬고, `B`가 `A`에게 선물을 3번 줬다면 다음 달엔 `A`가 `B`에게 선물을 하나 받습니다. 두 사람이 선물을 주고받은 기록이 하나도 없거나 주고받은 수가 같다면, 선물 지수가 더 큰 사람이 선물 지수가 더 작은 사람에게 선물을 하나 받습니다. 선물 지수는 이번 달까지 자신이 친구들에게 준 선물의 수에서 받은 선물..
[python] 백준 1244번 : 스위치 켜고 끄기 스위치 번호스위치 상태 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 0 1 0 1 0 0 0 1 예를 들어 에서 여학생이 3을 받았다면, 3번 스위치를 중심으로 2번, 4번 스위치의 상태가 같고 1번, 5번 스위치의 상태가 같으므로, 과 같이 1번부터 5번까지 스위치의 상태를 모두 바꾼다. 만약 에서 여학생이 4를 받았다면, 3번, 5번 스위치의 상태가 서로 다르므로 4번 스위치의 상태만 바꾼다. 스위치 번호스위치 상태 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 0 1 1 1 0 1 0 1 스위치 번호스위치 상태 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 1 0 0 0 1 1 0 1 입력으로 스위치들의 처음 상태가 주어지고, 각 학생의 성별과 받은 수가 주어진다. 학생들은 입력되는 순서대로 자기의 성별과 받은 수에 따라 스위치의 상태를 바꾸었을 때..
[python] 백준 1003 : 피보나치 함수 import sys n=int(sys.stdin.readline()) for k in range(n): num=int(sys.stdin.readline()) list0=[1, 0] list1=[0, 1] if num >1: for i in range(num-1): list0.append(list0[i]+list0[i+1]) list1.append(list1[i]+list1[i+1]) print(list0[num],list1[num]) 2022.05.08
[python] 백준 1002번 : 터렛 import sys import math num=int(sys.stdin.readline()) for num in range(num): x1, y1, r1, x2, y2, r2=map(int, sys.stdin.readline().split()) d=math.sqrt((x2-x1)**2+(y2-y1)**2) if x1==x2 and y2==y1: if r1==r2: print(-1) else: print(0) else: if (d==r1+r2 or d==abs(r1-r2)): print(1) elif(dabs(r1-r2)): print(2) else: print(0) 2022.05.08에 푼 문제..
[python] 백준 1004번 : 어린 왕자 2022.05.08에 푼 것 import sys import math T=int(sys.stdin.readline()) #test 횟수 for i in range(T): x1, y1, x2, y2=map(int, sys.stdin.readline().split()) n=int(sys.stdin.readline())#n=행성의 개수 cnt=0#count 변수 초기화 for k in range(n): cx,cy,r=map(int, sys.stdin.readline().split()) d1=math.sqrt((cx-x1)**2+(cy-y1)**2) d2=math.sqrt((cx-x2)**2+(cy-y2)**2) if (d1r) or (d2r): cnt=cnt+1 print(cnt) 뭐.. 이건 어렵진 않은 문..
[python] 백준 1007번 : 벡터 매칭 2022.05.24.에 푼 것 일단 이 문제도 그렇게 어려운 편은 아니었다. 하지만 고등학교 이후 벡터를 넘 오랜만에 봐서 그런지^^ 벡터 계산에 살짝 헤맸다.ㅎ.ㅎ 약간 바보인줄 알았닿ㅎㅋ import sys import math from itertools import combinations sys.stdin=open("num1007input.txt") T=int(sys.stdin.readline()) for _ in range(T): N=int(sys.stdin.readline()) aPoints=[] bPoints=[] rules=[] for _ in range(N): a,b=map(int,sys.stdin.readline().split()) aPoints.append(a) bPoints.appen..
[python] 백준 2563번: 색종이 이번 문제는 어려운 문제는 아니었다.......... 화가 좀 났을뿐............................ 일단 이 문제를 풀기 위해서 세 가지의 방법을 생각했다. 1. 색종이를 한장씩 붙이고 그럴때 마다 겹친 것을 빼주는 방법 2. 색종이가 있는 평면의 끝에서 끝까지의 공간에서 빈 공간의 크기를 뚫어내는 방법 3. 전체 100*100을 2차원 배열로 주고, 색종이가 있는 칸을 색칠하는 방법 나는 세번째 방법을 선택했다. 첫번째 방법은 겹치는 모양이 매번 달라지고 두개가 겹쳐있는 그 사이에 새로운 색종이가 올라오면 상당히 힘들 것 같았고, 두번째 방법은 생각보다 괜찮은 방법이라고 생각했지만 세번째 방법이 좀 더 쉽고 재미있어 보여서 진행했다. 중간중간 아.. 시간 초과될거같다는 생각을 매우 ..
[python] 백준 2581번: 소수 이번 문제는 소수에 관련한 문제이다. 소수를 찾는 과정에서 반복문을 돌릴 때 범위를 전체로 하면 코드가 너무 많이 돌아야해서 시간 초과가 난다. 이를 해결하기 위해서는 일단 판단 해야하는 숫자들의 범위를 줄여야한다. "어떤 수의 약수는 꼭 짝을 이루어서 나오게 된다." 이것이 바로 문제 해결의 솔루션이라고 생각한다. 짝을 이루어서 나오니, 판단 해야할 범위는 어떤 수의 제곱근 까지이다. 또한 구하는 과정에서 "에라토스테네스의 체"를 사용해야한다. 에라토스테네스의 체는 어떤 범위 내에서 아닌 숫자들을 다 제거해 나가는 방법이다. 체에 거르는 것과 같다고 하여 이름이 그렇게 붙여진 것 같다. 위 두 가지를 생각하면서 코드를 짜 보았다. from math import sqrt N=int(input()) M=i..