코딩테스트
[백준, 프로그래머스] 문제풀이
이수민
2023. 4. 11. 22:53
백준 15650
from itertools import combinations
a ,b = map(int, input().split())
nlist = [i for i in range(1,a+1)]
for i in list(combinations(nlist, b)):
print(*i)
백준 15651
a ,b = map(int, input().split())
nlist = []
def back(n):
if(n-1 == b):
print(*nlist)
return
for i in range(1,a+1):
nlist.append(i)
back(n+1)
nlist.pop()
back(1)
백준 4771 칸토어
def cantor(dash):
if(dash==1):
return "-"
thislen = dash//3
return cantor(thislen)+" "*thislen+cantor(thislen)
while(True):
try:
n = input()
if n == '':
break
else:
n=int(n)
length = 3**n
print(cantor(length))
except EOFError:
break
프로그래머스
- 성격 유형 검사하기
https://school.programmers.co.kr/learn/courses/30/lessons/118666
def solution(survey, choices):
mbti ={"RT": [0,0], "CF" : [0,0], "JM": [0,0], "AN": [0,0]}
for s, ch in zip(survey, choices):
if(s[::-1] in list(mbti.keys())):
s=s[::-1]
if(ch>3):
mbti[s][0]+=ch-4#TR
elif(ch<4):
mbti[s][1]+=abs(ch-4)
elif(s in list(mbti.keys())):
if(ch>3):
mbti[s][1]+=ch-4
elif(ch<4):
mbti[s][0]+=abs(ch-4)
answer = ""
for k, value in mbti.items():
if(value[0]<value[1]):
answer+=str(k)[1]
print(str(k)[1])
elif(value[0]==value[1]):
answer+=str(k)[0]
else:
answer+=str(k)[0]
return answer
개인공부
0으로 이루어진 영역의 개수 찾기 문제
dfs
# [DFS]
graph = [
[0,0,1,1,0],
[0,0,0,1,1],
[1,1,1,1,1],
[0,0,0,0,0]
]
n, m = map(int, input().split())
def dfs(x, y):
if x <= -1 or x >= n or y <= -1 or y >= m:
return False
if graph[x][y] == 0:
graph[x][y] = 1
dfs(x - 1, y)
dfs(x, y - 1)
dfs(x + 1, y)
dfs(x, y + 1)
print("TRUE",x,y)
return True
print("False",x,y)
return False
result = 0
for i in range(n):
for j in range(m):
if dfs(i, j) == True:
print("*****",i,j,"*****")
result += 1
print(result)
핵심은 dfs에서 뭘 반환했느냐는 중요하지 않다.
재귀하는 과정은 하나의 영역을 모두 1로 메꾸면 단 하나의 1만 반환될테니까
모든 영역을 메꾸면 그 메꾸는 횟수를 더한 것이다.
다음번에는 dfs에 대한 문제를 더 풀어보고 deque를 공부하며 bfs에 대한 개념을 공부해보겠다.