코딩테스트

코테 스터디 18번째 TIL : 탐색, 시뮬레이션 문제 풀이

hex2.1 2024. 9. 5. 12:32

 

  • 문제

두 리스트 합치기 - 탐색

 

 

 

  • 코드
n=int(input())
a=list(map(int,input().split()))
m=int(input())
b=list(map(int,input().split()))
p1=0
p2=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:]

print(c)

 

 

  • 설명 및 개념

 

💡 p1과 p2를 포인터로 사용하여 문제를 해결 

 

 

 



 

 

  • 문제

격자판 최대합 - 시뮬레이션

 

 

 

 

 

  • 코드 
n=int(input())
a=[list(map(int,input().split())) for _ in range(n)]
large=-21345000

for i in range(n):
  sum1=0
  sum2=0
  for j in range(n):
    sum1+=a[i][j]
    if sum1 > large:
      large = sum1 
    sum2+=a[j][i]
    if sum2 > large:
      large = sum2

for i in range(n):
  sum3=0
  sum4=0
  sum3+=a[i][i]
  sum4+=a[i][n-i-1]
  if sum3 > large:
    large = sum3
  if sum4 > large:
    large = sum4

print(large)

 

 

 

  • 설명 및 개념

💡 리스트를 요소로 가지는 리스트를 생성하기 위해 a=[ list(map(int,input().split())) for _ in range(n)] 과 같은 방법을 사용했다 

[ [10, 13, 12], [11, 12, 13], [65, 65, 45] ] 과 같은 리스트가 만들어진다 

 

 

 

 

 

  • 문제

사과나무 - 시뮬레이션

 

 

 

 

  • 코드
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)

 

 

 

  • 문제

곳감(모래시계) - 시물레이션

  • 코드
n=int(input())
a=[list(map(int,input().split())) for _ in range(n)]
m=int(input())
for i in range(m):
  h,b,k=map(int,input().split())
  for _ in range(k):
    if b==0:
      a[h-1].append(a[h-1].pop(0))
    else:
      a[h-1].insert(0,a[h-1].pop())

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)

 

 

 

 

 

 

 

 

 

 

  • 설명

💡 pop(0) : 리스트의 제일 왼쪽 값을 뺀다

💡 append(값) : 값을 리스트의 제일 뒤에 넣는다

💡 insert( 인덱스, 값 ) : 값을 리스트의 원하는 인덱스에 넣는다