본문 바로가기

자료구조

(12)
[python] 코딩테스트 대비 - 이분검색(랜선자르기) 문제) 답안 코드) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import sys #sys.stdin=open("input.txt", "r") def Count(len):#len으로 짜를 수 있는 총 갯수 리턴 cnt=0 for x in Line: cnt+=(x//len) return cnt k, n=map(int, input().split()) Line=[]#길이 리스트 res=0#정답 largest=0#최대 값 for i in range(k): tmp=int(input()) Line.append(tmp) largest=max(largest, tmp) lt=1 rt=largest#1~최대값 범위 지정 whi..
[python] 코딩테스트 대비 - 2차원 배열에서 회문 탐색 문제) 답안 코드) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import sys #sys.stdin=open("in1.txt", "r") board=[list(map(int, input().split())) for _ in range(7)] cnt=0 len=5 for i in range(3): for j in range(7):#가로 검사 tmp=board[j][i:i+len]#5글자 검사 if tmp==tmp[::-1]:#회문인지 확인 cnt+=1 for k in range(len//2):#세로 검사 if board[i+k][j]!=board[len-k+i-1][j]:#맨앞 맨뒤 비교 반복 break else: cnt+=1 print(cnt) Colored ..
[python] 코팅테스트 대비 - 2차원 배열 상하좌우 비교 문제) 정답 코드) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import sys #sys.stdin = open("input.txt", 'r') dx=[-1, 0, 1, 0]#상하좌우 탐색을 위함. dy=[0, 1, 0, -1]#상하좌우 탐색을 위함. n=int(input()) a=[list(map(int, input().split())) for _ in range(n)] ######0으로 배열 둘러 싸기####### a.insert(0, [0]*n)#최상단에 0배열 추가 a.append([0]*n)#최하단에 0배열 추가 for x in a:#각 행마다 맨 앞, 맨 뒤에 0추가 x.insert(0, 0) x.append(0) #######..
[python] 코딩테스트 대비 - 2차원 배열 회전 및 모래시계 탐색 문제) 답안코드) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import sys #sys.stdin = open("input.txt", 'r') n=int(input()) a=[list(map(int, input().split())) for _ in range(n)] m=int(input())#회전 명령 수 for i in range(m): h, t, k=map(int, input().split())#행, 방향, 수 if(t==0):#왼쪽일 경우 for _ in range(k): a[h-1].append(a[h-1].pop(0))#맨 앞자료를 빼서 맨 뒤로 삽입 else:#오른쪽일 경우 for _ in ..
[python] 코딩테스트 대비 - 정렬된 리스트 합치기 문제) 답안코드) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import sys #두리스트 더해서 sort() 하면 시간복잡도 nlog(n)-퀵소트 일경우 #정렬된 두 리스트 이기 때문에 앞에서 부터 하나씩 비교해 나가면 n번 반복으로 가능 #sys.stdin=open("input.txt", "r") n=int(input()) a=list(map(int, input().split())) m=int(input()) b=list(map(int, input().split())) p1=p2=0#리스트 인덱스 가르키는 포인터 역할 c=[]#결과 리스트 while p1
[python] 코딩테스트 대비 - 점수계산 문제) 답안 코드) 1 2 3 4 5 6 7 8 9 10 11 12 13 import sys #sys.stdin=open("input.txt","rt") N=int(input()) box=list(map(int,input().split())) weight=1 score=0 for i in box: if i==1:#맞췄을때 score+=weight*i weight+=1 else:#맞추지 못했을때 weight=1 print(score) cs
[python] 코딩테스트 대비 - 소수(에라토스테네스 체) 문제) 답안 코드) 1 2 3 4 5 6 7 8 9 10 11 12 13 import sys #sys.stdin=open("input.txt","rt") #숫자마다 2부터 시작해서 소수를 체크하는 방식은 시간초과가 발생함. N=int(input()) check=[0]*(N+1)#총 n+1개의 리스트 (인덱스3은 숫자3을 의미) count=0 for i in range(2,N+1):#인덱스 2부터(0 1은 확인할 필요 없음,) N까지 반복 if check[i]==0:#i인덱스가 소수라면 count+=1#카운트 증가 for j in range(i,N+1,i):#i의 배수들은 소수가 아님을 표시 check[j]=1 print(count) Colored by Color Scripter cs
[python] 코딩테스트 대비 - 자릿수의 합 문제) 답안 코드) -2가지 방법 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import sys #sys.stdin=open("input.txt","rt") #방법1 - 숫자 그대로 이용 def digit_sum2(x): num=0 while x>0: num+=x%10#10으로 나눈 나머지 ex)121을 10으로 나눈 나머지는 1 즉, 한자리 수를 의미 x=x//10#10으로 나눈 몫 ex) 121를 10으로 나눈 몫은 12 여기서 다시 10으로 나눈 나머지를 구하면 2(다음 자리수 접근) return num #방법 2 - 문자열 이용 def digit_sum(x): sum=0 for i in str(x):#..