코딩테스트/Python

코딩테스트 3. 탐색 & 시뮬레이션 (1)

star빛 2022. 6. 3. 21:44
1. 회문 문자열
import sys
sys.stdin=open("pythonalgorithm/섹션 3/1. 회문 문자열 검사/in3.txt","rt")
n=int(input())

#방법1
for i in range(n):
    s=input()
    s=s.upper()
    size=len(s)
    for j in range(size//2):
        if s[j]!=s[-1-j]:
            print("#%d NO" %(i+1))
            break
    else:
        print("#%d YES" %(i+1))

 

2. 숫자만 추출
import sys
sys.stdin=open("pythonalgorithm/섹션 3/2. 숫자만 추출/in1.txt", "rt")
s=input() # string은 그냥 input으로 받기
res=0
for x in s:
    if x.isdecimal():
        res=res*10+int(x)
print(res)
cnt=0 #약수의 개수
for i in range(1, res+1):
    if res%i==0:
        cnt+=1
print(cnt)

 

3. 카드 역배치
import sys
sys.stdin=open("pythonalgorithm/섹션 3/3. 카드 역배치/in1.txt","rt")
a=list(range(21))
for _ in range(10):
    s, e=map(int, input().split())
    for i in range((e-s+1)//2):
        a[s+i], a[e-i]=a[e-i], a[s+i]
a.pop(0) #0번 인덱스를 pop해라.
for x in a:
    print(x, end=' ')

 

4. 두 리스트 합치기
n=int(input())
a=list(map(int, input().split()))
m=int(input())
b=list(map(int, input().split()))
p1=p2=0 #포인터변수 0으로 초기화
c=[]
while p1<n and p2<m:
    if a[p1]<=b[p2]:
        c.append(a[p1])
        p1+=1
    else:
        c.append(b[p2])
        p2+=1
if p1<n:
    c=c+a[p1:]
if p2<m:
    c=c+b[p2:]
for x in c:
    print(x, end=' ')

 

 

5. 수들의 합
import sys
sys.stdin=open("pythonalgorithm/섹션 3/5. 수들의 합/in1.txt", "rt")
n, m=map(int, input().split())
a=list(map(int, input().split()))
lt=0
rt=1
tot=a[0]
cnt=0
while True:
    if tot<m:
        if rt<n:
            tot+=a[rt]
            rt+=1
        else:
            break
    elif tot==m:
        cnt+=1
        tot-=a[lt]
        lt+=1
    else:
        tot-=a[lt]
        lt+=1
print(cnt)

 

6. 격자판 최대합
n=int(input())
a=[list(map(int, input().split())) for _ in range(n)] # 2차원 리스트 생성
largest=-2147000000
for i in range(n):
    sum1=sum2=0
    for j in range(n):
        sum1+=a[i][j]
        sum2+=a[j][i]
    if sum1>largest:
        largest=sum1
    if sum2>largest:
        largest=sum2
sum1=sum2=0
for i in range(n):
    sum1+=a[i][i]
    sum2+=a[i][n-i-1]
    if sum1>largest:
        largest=sum1
    if sum2>largest:
        largest=sum2
print(largest)

 

 

7. 사과나무(다이아몬드)
n=int(input())
a=[list(map(int, input().split())) for _ in range(n)]
res=0
s=e=n//2
for i in range(n):
    for j in range(s,e+1):
        res+=a[i][j]
    if i<n//2:
        s-=1
        e+=1
    else:
        s+=1
        e-=1
print(res)

 

 

8. 곶감(모래시계)
import sys
sys.stdin=open('pythonalgorithm/섹션 3/8. 곳감/in1.txt','rt')
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)) # 하나의 회전을 k번 하겠다.
    else:
        for _ in range(k):
            a[h-1].insert(0, a[h-1].pop()) # 하나의 회전을 k번 하겠다.
res=0
s=0
e=n-1
for i in range(n):
    for j in range(s, e+1):
        res+=a[i][j]
    if i<n//2:
        s+=1
        e-=1
    else:
        s-=1
        e+=1
print(res)

출처 : 인프런 강의

강의명 : 파이썬 알고리즘 문제풀이 (코딩테스트 대비)