고등학교때 풀던 신발끈 공식으로 풀었다. 현우진 센세 미안 ㅋㅋ 그래도 신발끈은 신인걸 ㅋㅋ n=int(input()) l=[] for _ in range(n): l.append(list(map(int,input().split()))) l.append(l[0]) plus=0 minus=0 for x in range(n): plus+=l[x][0]*l[x+1][1] minus+=l[x][1]*l[x+1][0] S=abs(plus-minus)/2 print(round(S,2))
파이썬
옛날에 풀었던 문제 두 번 정렬해서 해결했다. n=int(input()) li=[] for _ in range(n): a,b=map(int, input().split()) li.append([a,b]) cnt=1 li.sort(key=lambda x:x[0]) li.sort(key=lambda x:x[1]) time=li[0][1] for i in range(1,n): if li[i][0]>=time: cnt+=1 time=li[i][1] print(cnt)
생각보다 어려웠던 문제 두개를 정렬해서 하려고 했다. 하나의 첫번째 인덱스에 해당하는 값을 다른 리스트에서 찾고, 그 위치 이후에 있는 값을 outarr에 저장해서 n-len(outarr)를 하려고 했다. import sys input=sys.stdin.readline t=int(input()) for _ in range(t): n=int(input()) l=[] for _ in range(n): l.append(list(map(int,input().split()))) l.sort(key=lambda x:x[0]) seoryu=l[:] stop=l[0] l.sort(key=lambda x:x[1]) myeongeop=l[:] mtop=l[0] outarr=[] for x in range(n): if my..
숫자라기보다 정말 높이라고 생각하고, 그림을 그려보아서 빠르게 접근할 수 있었던 문제. 정렬되었을 때, 높이차가 가장 안나게 하려면 현재 통나무 인덱스의 다음다음번째 인덱스를 옆으로 가져와야 한다. 다만 갑자기 max쓸지, min쓸지 하다가 좀 헤맸다. t=int(input()) for _ in range(t): m=0 n=int(input()) l=list(map(int,input().split())) l.sort(reverse=True) for x in range(n-2): m=max(m,abs(l[x]-l[x+2])) print(m)
사용시간과 마감시간을 리스트에 입력받아서, 마감시간 기준으로 오름차순 정렬을 해준다. 해당 마감시간 이전에 해당하는 사용시간들을 모두 더해서 마감시간보다 큰지 비교하고, 크다면 -1을 반환하고 프로그램을 종료한다. 그렇지 않다면, 마감시간에서 사용시간을 빼서 최소값에 저장한다. 최소값을 출력한다. n=int(input()) m=float('inf') l=[] for _ in range(n): t,s=map(int,input().split()) l.append([t,s]) l.sort(key=lambda x:x[1]) for x in range(len(l)): S=l[x][0] for y in range(x): S+=l[y][0] if l[x][1]
s=input() l=[] ret=[] start=0 for x in range(len(s)): if s[x]==':': l.append(s[start:x]) start=x+1 l.append(s[start:]) for x in l: if len(x)==4: ret.append(x) elif len(x)==3: ret.append('0'+x) elif len(x)==2: ret.append('00'+x) elif len(x)==1: ret.append('000'+x) else: ret.append('') tmp=[] for x in range(len(ret)-1): if ret[x]=='': t=9 if ret[x+1]=="": t=10 for i in range(t-len(ret)): tmp.appen..
간단하게 해결했다. 일단 팰린드롬을 체크해야하는데, 문제에서 붙이는 문자열은 무조건 뒤에 붙으므로 맨 뒤의 문자열과 동일한 문자를 갖는 인덱스들로 부터 팰린드롬 체크를 시작한다. 그리고, while s[i]==s[j]로 하나씩 인덱스를 좁히며 (i+=1, j-=1) i==j인 경우나, 예시 ) abcba i>j인 경우, 예시) abaaba 팰린드롬 문자열이므로 시작문자열의 인덱스+총 문자열의 길이를 출력해주었다. s=input() i=0 cnt=0 length=len(s) for x in range(length): j=length-1 ck=0 if s[x]==s[j]: i=x while s[i]==s[j] and i=j: print(x+length) exit()
KMP알고리즘을 이용하는 문제 kmp알고리즘은 기본적으로 투포인터와 비슷한 맥락으로 풀이한다. 패턴부분의 접두사, 접미사의 길이를 구하고, 이를 통해서 문자열을 계산한다. s=input() p=input() #p의 접두사, 접미사 구하기 l=[0 for x in range(len(p))] i=1 j=0 while i0 and p[j]!=p[i]: j=l[j-1] if p[j]==p[i]: j+=1 l[i]=j i+=1 j=0 for i in range(len(s)): while (j>0 and s[i]!=p[j]): j=l[j-1] if s[i]==p[j]: if j==len(p)-1: print("1") exit() else: j+=1 print("0") 위의 코드에서 while i0 and s[i]!..
정말 쉽지 않았던 문제 뭔가 새로운 방법을 얻은 것 같다. 새로 리스트를 만들어서 재귀시켰더니 메모리 초과가 났다. 그래서 q의 길이를 줄이면서 q를 진행시켰다. from collections import deque dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] def bfs(x, y): q.append([x, y]) c[x][y] = 1 while q: qlen = len(q) while qlen: x, y = q.popleft() for i in range(4): X = x + dx[i] Y = y + dy[i] if 0
미로 찾기 + A같은 느낌... 처음에는 dfs를 통해 계속 고르는 개수를 증가시키면서 해결하려고 했으나 결국은 검은 방도 모두 탐색해야하므로, 흰방을 모두 탐색한 뒤에, 검은방 탐색시키면 됐었던 문제. 그래서 흰방은 append를 해줬고, 검은 방은 appendleft를 해주었다. 결국은 bfs의 bfs. 였다. 탐색에 대한 생각을 다시한번 하게 해줬던 문제. #https://www.acmicpc.net/problem/2665 from collections import deque def bfs(x,y): dx=[-1,1,0,0] dy=[0,0,-1,1] q=deque() q.append((x,y)) while q: x,y=q.popleft() for i in range(4): X=x+dx[i] Y=y+..