[백준]10870, 25501, 2798, 2231, 연립방정식, 체스판 다시 칠하기

2023. 4. 13. 16:30코딩테스트

#피보나치, 10870

def fbnc(num):
  if(num==0):
    return 0
  elif(num==1):
    return 1
  else:
    return fbnc(num-1)+fbnc(num-2)

n = int(input())
print(fbnc(n))
n = int(input())
result = 0
flist = [0,1]
if(n==0):
  print(0)
else:
  for i in range(n-1):
    flist.append(flist[i]+flist[i+1])
  print(flist[-1])

for 문 버전, 재귀 버전

 

#25501
def recursion(s, l, r):
  global idx
  idx += 1
  if l >= r: return 1
  elif s[l] != s[r]: return 0
  else: return recursion(s, l+1, r-1)

def isPalindrome(s):
  return recursion(s, 0, len(s)-1)

n = int(input())

for i in range(n):
  idx=0
  strr = input()
  print(isPalindrome(strr), idx)

 

#2798
from itertools  import combinations

a, b = map(int, input().split())
ainput = list(map(int,input().split()))

plist = list(combinations(ainput, 3))


dis = 300001
result = 0

for i in plist:
  if(sum(i)==b):
    result= b
    break
  else:
    if( (b - sum(i))<dis and sum(i) <= b):
      dis = (b - sum(i))
      result = sum(i)

print(result)

 

#2231번
n = int(input())

slist=[]
for i in range(n//2,n+1):
  strl=list(str(i))
  temp=( i + sum(list(map(int,strl))))
  if (temp==n): 
    slist.append(i)

if(not slist):
  print(0)
else:
  print(slist[0])

 

 

연립방정식 문제 오류1, 런타임에러

import numpy as np

a,b,c,d,e,f = map(int, input().split())
x, y = 0,0
A = np.array([[a, b], [d, e]])
C = np.array([c, f])
x, y = np.linalg.solve(A, C)

print(int(x),int(y))

오류2 런타임에러

이건 나눌때 0으로 나눠지는 부분의 경우의 수만 제거해주면 해결되긴 한다.

a,b,c,d,e,f = map(int, input().split())

temp=(b*d)-(e*a)
sum = (c*d)-(f*a)
y=sum//temp
x=(c-(y*b))//a
print(x,y)

브루트 포스처럼 풀어보자

a,b,c,d,e,f = map(int,input().split())

for i in range(-999,1000):
    for j in range(-999,1000):
        if a*i + b*j == c and d*i + e*j == f:
            print(i,j)

 

 

 

체스판 다시칠하기 문제는... 문제자체를 이해를 잘못하고 있었다.

게다가 갑자기 구글 코랩이 이상해져서 idle로 실행을 하는데 불편한 채로

계속 삽질하다가 다른 정답을 보게 되었다.

n, m = map(int, input().split())
board = []
result = []
 
for _ in range(n):
    board.append(input())
 
for i in range(n-7):
    for j in range(m-7):
        draw1 = 0
        draw2 = 0
 
        for a in range(i, i+8):
            for b in range(j, j+8):
                if (a + b) % 2 == 0:
                    if board[a][b] != 'B':
                        draw1 += 1
                    if board[a][b] != 'W':
                        draw2 += 1
                else:
                    if board[a][b] != 'W':
                        draw1 += 1
                    if board[a][b] != 'B':
                        draw2 += 1
 
        result.append(draw1)
        result.append(draw2)
 
print(min(result))
#(a + b) % 2 == 0, 짝홀수 가려지면서 이에 해당되는 것들은 줄눈(?) 대각선으로 그어짐, 새로 알아감

 

'코딩테스트' 카테고리의 다른 글

프로그래머스 H-index  (0) 2024.05.20
[백준] 15894, 9063, 10101, 5073, 14215, N-Queen  (0) 2023.04.12
[백준, 프로그래머스] 문제풀이  (0) 2023.04.11