튜터님 수업
데이터 타입
데이터 타입은 효율이다!
트리구조!
트리구조는 상하관계가 있다!
그래프는 서로가 서로를 이어주고 있다!
소셜망같은 느낌
오늘의 메인 디쉬!
자료를 배울 때에는 구조와 연산이 중요하다!!!
맨위를 탑!
탑을 꺼낼 때에는 pop
밀어넣기
뒤로가기가 스택에 가장 기본적인 예시!
스택의 연산방법!
백트래킹!!
한정조건을 걸어준다!
가지치기를 한다!
오늘도 즐거운 문제 풀이시간!
와 오늘은 정말로 맵다!
괄호
# Code
import sys
# 표준 입력을 파일로 설정
sys.stdin = open("input.txt", "r")
# 테스트 숫자 입력
test = int(input())
# 테스트 숫자 만큼 반복
for _ in range(test):
# 입력 값을 단어마다 나누어서 리스트화
n = list(input())
# 계산을 도와줄 통
num = 0
# 반복문에 들어가서 비교하기
for i in n:
# (이라면 +1 )이라면-1을 해서 0이되면 괄호가 닫힌 것이다
if i == "(":
num += 1
elif i == ")":
num -= 1
# 만약에 이미 괄호가 완성이 되어서 0인 상테에 )가 들어오면 -1이 되므로 잘못된 괄호 이므로 아웃
if num < 0:
break
# 괄호가 모두 잘되어 있으면 yes
if num == 0:
print("YES")
# 괄호가 부적합이면 no
else:
print("NO")
-----------------------------stack 사용---------------------------
# 테스트 숫자 입력
test = int(input())
# 테스트 숫자 만큼 반복
for _ in range(test):
# 입력 값을 단어마다 나누어서 리스트화
n = list(input())
# 계산을 도와줄 통
stack = []
for i in n:
if i == ")" and stack:
stack.pop()
elif i == "(":
stack.append(i)
else:
stack.append(i)
break
if not stack:
print("YES")
else:
print("NO")
좋은 단어
# Code
import sys
# 표준 입력을 파일로 설정
sys.stdin = open("input.txt", "r")
# 테스트 반복 !
T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
# 입력받을 줄의 갯수 구하기
num = int(input())
# 합격한 문장의 수
cnt = 0
# 반복문 들어 가면서 검사 받을 문장 입력
for _ in range(num):
text_line = input().rstrip()
stack = []
# stack에서 append와 pop을 이용해서 짝 맞추기!
for i in range(len(text_line)):
# stack내부에 값이 존재하고 맨 마지막으로 넣었던 값이 지금 비교하고 싶은 값과 같다면 가지고 나가기
if stack and text_line[i] == stack[-1]:
stack.pop()
# 안에 값이 없거나 지금 내가 들고 있는 문자랑 값이 다르다면 맨위로 값을 넣기
else:
stack.append(text_line[i])
# 모든 짝이 맞추어 stack의 값이 아무것도 없다면 재대로된 문자열로 포인트 1점
if not stack:
cnt += 1
print(cnt)
연산자 끼워 넣기
# Code
import sys
# 표준 입력을 파일로 설정
sys.stdin = open("input.txt", "r")
# 테스트 반복 !
T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
num = int(input())
numbers = list(map(int, input().split()))
tools = list(map(int, input().split()))
max_value = -1000000000
min_value = 1000000000
def find_value(num_count, value, plus, minus, multiply, divide):
global max_value, min_value
if num_count == num:
max_value = max(value, max_value)
min_value = min(value, min_value)
return
if plus > 0:
find_value(num_count + 1, value + numbers[num_count], plus - 1, minus, multiply, divide)
if minus > 0:
find_value(num_count + 1, value - numbers[num_count], plus, minus - 1, multiply, divide)
if multiply > 0:
find_value(num_count + 1, value * numbers[num_count], plus, minus, multiply - 1, divide)
# 이거 나누는 법을 잘 알아야한다 -5에서 2를 //로 나누면 내림이 적용이 되서 값이 -3이 나온다... 그래서 int 써야함
if divide > 0:
find_value(num_count + 1, int(value / numbers[num_count]), plus, minus, multiply, divide - 1)
find_value(1, numbers[0], tools[0], tools[1], tools[2], tools[3])
print(max_value)
print(min_value)
# # 입력 받기
# N = int(input())
# # 숫자 열
# num = list(map(int, input().split()))
# # 각 연산자들
# op = list(map(int, input().split())) # +, -, *, //
#
# # 최고 값을 받기 위해서 가장 낮은 값 설정
# maximum = -1e9
# # 최저 값을 받기 위해서 가장 높은 값 설정
# minimum = 1e9
#
# # ( 현재 사용중인 숫자 갯수, 현재의 값, 각각 더하기, 빼기, 곱하기, 나누기 남은 횟수)
# def dfs(depth, total, plus, minus, multiply, divide):
# global maximum, minimum
# # 숫자 사용 횟수가 다 찾을 때 끝내기
# if depth == N:
# # 지금 까지의 최고 값과 계산 했을 때 계산 값을 비교 큰 값을 넣어 주라
# maximum = max(total, maximum)
# # 지금 까지의 최저 값과 계산 했을 때 계산 값을 비교 작은 값을 넣어 주라
# minimum = min(total, minimum)
# return
# # 더하기 횟수가 남아 있다면 실행
# if plus:
# dfs(depth + 1, total + num[depth], plus - 1, minus, multiply, divide)
# # 빼기 횟수가 남아 있다면 실행
# if minus:
# dfs(depth + 1, total - num[depth], plus, minus - 1, multiply, divide)
# # 곱하기 횟수가 남아 있다면 실행
# if multiply:
# dfs(depth + 1, total * num[depth], plus, minus, multiply - 1, divide)
# # 나누기 횟수가 남아 있다면 실행
# if divide:
# dfs(depth + 1, int(total / num[depth]), plus, minus, multiply, divide - 1)
#
# # dfs입장 1번 부터 가지고 갑니다, 현재 값은 0, 각각의 도구 횟수 입력
# dfs(1, num[0], op[0], op[1], op[2], op[3])
# # 결과
# print(maximum)
# print(minimum)
쇠막대기
# Code
import sys
# 표준 입력을 파일로 설정
sys.stdin = open("input.txt", "r")
# 레이저와 파이프 위치 입력
laser = input()
# 잘린 파이프 확인!
stack = []
# 파이프 갯수 저장
pipe = 0
# 레이저 ) 인지 파이프 )인지 판단
flag = True
# 글자 하나씩 전진!
for char in laser:
# 여는 괄호면 파이프거나 레이저 일 수 있지만 일단 스택 넣기
if char == "(":
stack.append(char)
flag = True
# 맨 처음으로 닫는 괄호가 나오면 그건 레이저 다 파이프를 자르자
elif char == ")":
# 맨 처음 만나는 괄호 인지 아닌지
if flag:
# 레이저로 넣었던 (는 필요 없으니 빼 내기
stack.pop()
# 스택에 들어있는 파이프 만큼 파이프에 저장
pipe += len(stack)
# 이제 뒤에 연달아 나오는 )는 레이저가 아니라 파이프 입니다.
flag = False
# 연달아오는 )
else:
# 파이프 하나 빼고
stack.pop()
# 꼬다리 파이프 챙겨
pipe += 1
print(pipe)
n과 m (순열)
# Code
import sys
# 표준 입력을 파일로 설정
sys.stdin = open("input.txt", "r")
def solve(list_num):
# 변하지 않을 변수니깐 글로벌로 가져오기
global m
global n_list
# 글자 수 가 같으면 출력
if m == len(list_num):
# 이거 잘보고 해야한다. 앞에서 숫자로 리스트에 넣었기 때문에 다시 글자로 바꾸어 주어야함 이번 같은 경우는 그냥 처음부터 문자로 해도됨
print(" ".join(map(str, list_num)))
return
# 중복 검열
for i in n_list:
# 안에 있으면 패스
if i in list_num:
pass
# 없으면 요인 추가 시켜서 재귀 참고로 append안된다.
else:
solve(list_num + [i])
n, m = map(int, input().split())
# 리스트는 1번부터 생성
n_list = list(range(1, n + 1))
solve([])
n과 m 2
# Code
import sys
# 표준 입력을 파일로 설정
sys.stdin = open("input.txt", "r")
def solve(list_num, store_item):
# 변하지 않을 변수니깐 글로벌로 가져오기
global m
global n_list
# 글자 수 가 같으면 출력
if m == len(list_num):
list_num.sort()
if list_num not in store_item:
store_item.append(list_num)
return
else:
return
# 중복 검열
for i in n_list:
# 안에 있으면 패스
if i in list_num:
pass
# 없으면 요인 추가 시켜서 재귀 참고로 append안된다.
else:
solve(list_num + [i], store_item)
return store_item
n, m = list(map(int, input().split()))
# 리스트는 1번부터 생성
n_list = list(range(1, n + 1))
answer = solve([], [])
for i in answer:
print(" ".join(map(str, i)))
'코딩 교육 TIL' 카테고리의 다른 글
2024-03-12 AI 코딩 TIL (0) | 2024.03.12 |
---|---|
2024-03-11 AI 코딩 TIL (0) | 2024.03.11 |
2024-03-07 AI 코딩 TIL (0) | 2024.03.07 |
2024-03-06 AI 코딩 TIL (1) | 2024.03.06 |
2024-03-05 AI 코딩 TIL (3) | 2024.03.05 |