본문 바로가기

IT

(7)
동적 계획법 동적 계획법을 효율적으로 활용하기 위한 두 가지 조건 1. 작은 문제의 해결책의 합으로 큰 문제를 해결할 수 있는 구조 (최적 부분 구조) 2. 큰 문제를 나누었을 때 작은 문제가 여러 개 반복되는 구조 (중복 부분 문제) 즉, 동적 계획법 == 점화식 세우기 라고 생각 하면 된다. 규칙을 잘 찾는게 우선!! 점화식 구현은 주로 재귀를 활용하여 구현 But, 재귀 호출은 함수를 계속하여 호출하므로 (스택 메모리에 함수 호출 정보가 쌓여) 메모리와 런타임에 문제가 생길 수 있음 이럴 때 개선 할 수 있는 방법은 1. 재귀 호출 자체를 사용 X : 반복문 2. 재귀 호출의 횟수를 줄이는 방법 : 메모이제이션 >> 메모이제이션 : 이미 계산한 값을 저장해두었다가 이후에 쓸 일이 있을 때 활용하는 개념 => 반..
코테 대비 파이썬 1. 시간복잡도, 리스트 IndexError 에 신경쓰자 2. 다수를 입력 받을 때나 입력이 차지하는 비중이 높을 때 import sys를 사용하여 입력받는게 빠르다. import sys input=sys.stdin.readline 후 input으로 사용 3. list 안에 for문 안쓰고 a = list(map(int, sys.stdin.readline().split())) 같이 입력 받을 수 있다.
백준 1181번: 단어 정렬 Q. A. n=int(input()) a=set([input() for _ in range(n)])#set로 만들어 중복된 단어 삭제 a=list(a) a.sort(key=lambda x:(len(x), x)) for i in a: print(i) # list를 정렬하는 sort - 기본 형태 sort(key, reverse) - list를 정렬하는 sort 함수를 lambda를 사용하여 우선 단어의 길이를 기준으로 정렬하고, 이후 사전 순으로 추가 정렬
C언어 문자열 처리 연습 문제 - <이름과 나이 동일 여부 판단> Q. 프로그램 사용자로부터 이름과 나이를 다음의 형식에 맞춰서 하나의 문자열로 입력 받는다. "이정선 29" "한수정 7" 이름은 세 글자가 아닐 수도 있고, 영문으로 입력 될 수도 있다. 단, 이름과 나이 사이에만 공백이 삽입된다. 이러한 형식으로 두 사람의 정보를 입력 받아서 이름과 나이가 각각 같은지 다른지를 판단하여 출력하는 프로그램을 작성해보자. A. #include #include int space(char str[]); int name(char str1[], char str2[]); int age(char str1[], char str2[]); int main() { char p1[20]; char p2[20]; fgets(p1, sizeof(p1), stdin); fgets(p2, size..
백준 1157번: 단어 공부 A. c=input().upper()#대소문자를 구분하지 않으니 나중에 출력할 대문자로 받아주자 a=list(set(c))#for문의 시간 초과 방지를 위해 중복 단어를 제거하는 set로 변형 후 list로 만들어주자 d={} v=[] for i in a: d[i]=c.count(i)#count를 통해 입력 받은 단어에서 각 알파벳이 사용된 개수를 세주자 v.append(d[i])#위에서 센 개수를 v 리스트에 저장하자 if v.count(max(v))>1:#만약 v 리스트에서 최댓값이 1개 보다 많으면 가장 많이 사용된 알파벳이 여러 개이므로 ? 출력 print("?") else:#위의 경우가 아니라면 index를 통해 최댓값의 주소를 찾아 그 단어를 출력 print(a[v.index(max(v))])
백준 11718번: 그대로 출력하기 Q. 입력 받은 대로 출력해야 함. HINT. 예외 처리를 통해 해결할 수 있다. 예외 처리기의 기본 형식은 이렇다. try: 실행할 코드 except (예외 이름): 예외가 발생했을 때 처리하는 코드 저 문제는 입력 받은 대로 계속 출력해야 하므로, 결국 파일의 끝을 검사하는 EOF 처리를 해야한다. 예외 처리기의 기본 형식에서 except 뒤에 예외 이름을 입력하면, 그 예외가 발생했을 때만 예외 처리 코드를 실행 가능하다. 예를 들어, except ZeroDivisionError 는 숫자를 0으로 나눠서 에러가 발생했을 때 실행된다. EOF, 즉 파일의 끝을 만나면 발생하는 오류의 이름은 EOFError 이므로 except EOFError 를 통해 처리 할 수 있다. A. while True: tr..
터틀 그래픽과 반복을 이용하여 싸인(sin) 그래프 그리기 코드 + 설명 import math#math 라이브러리 선언 import turtle#turtle 라이브러리 선언 t=turtle.Turtle() t.shape("turtle")#모양을 터틀로 for i in range(360): S=math.sin(math.pi*i/180) #싸인 값 = math.sin(라디안) //라디안 = math.pi(3.14)*각도/180 t.goto(i, S*100) #그래프 그리기 (y좌표의 S(싸인 값)에 곱하는 수에 따라 높낮이 폭이 변함) turtle.done()#터틀 그래픽 실행 결과 화면에 띄워놓기 실행 결과