https://www.acmicpc.net/problem/11021 # 문제상황 출력이 다음과 같은 형식을 준수해야합니다. 어떻게 하면 깔끔하게 코드를 짤 수 있을까요? # 해결 이 문제를 깔끔하게 풀려면 문자열 포매팅에 대해 알아야합니다. 문자열 포매팅에 대한 설명은 아래 링크를 참조하시길 바랍니다. https://beluga9.tistory.com/335
Algorithm
https://www.acmicpc.net/problem/2742 # 문제상황 보통 for문과 함께 자주 쓰이는 파이썬 내장 함수로 range가 있습니다. for i in range(3): 예를 들어, 위와 같은 코드는 반복문을 수행할 때마다 i의 값에 0부터 2까지의 숫자가 차례차례 들어가게 됩니다. 시작 숫자를 0이 아닌 다른 숫자로 설정하고 싶다면 아래와 같이 코드를 짜면 됩니다. for i in range(1, 3): 위 코드는 반복문을 수행할 때마다 i에 1부터 2까지의 숫자가 차례대로 들어가게 되는 것입니다. 그런데, 지금까지 보여준 예시들은 전부 숫자가 오름차순으로 1씩 증가하는 코드들인데요, 오름차순이 아니라 내림차순 코드도 range함수를 써서 작성할 수 있을까요? # 해결 바로 아래와 ..
https://www.acmicpc.net/problem/15552 # 문제상황 이 문제는 언뜻 보면 단순히 두 수를 입력받아 더하기만 하면 되는 매우 쉬운 문제로 보이지만, 시간 제한이 있어 평범한 방법으로 풀게 될 경우 시간초과가 뜨게 됩니다. 프로그래밍 언어에서 고급 언어들 중에서 '그나마' 제일 기계어와 가깝다는 C언어의 실행 속도는 매우 빠른 편이라, 아마 C언어로 이 문제를 풀게 될 경우 평소에 풀던대로 풀어도 시간초과가 안 뜰 것입니다. 하지만 우리는 파이썬으로 문제 풀이를 할 것이기 때문에, 문제에서도 권고한 대로 'input' 대신 'sys.stdin.readline'을 사용하여 시간 단축을 해보겠습니다. # 해결 import sys x = sys.stdin.readline() sys.s..
# 문제상황 테스트 케이스 T를 입력받은 후, 똑같은 수행(이 문제에서는 덧셈 연산)을 T번 반복해야되는 문제입니다. 앞으로 코딩테스트 문제를 풀다보면 지금과 같이 테스트 케이스 횟수를 입력받아야 되는 상황이 자주 등장할텐데요. 코드로 어떻게 짜는 것이 좋을까요? T = int(input()) while T: T -= 1 저는 맨 처음에는 위와 같은 코드를 생각했었는데요, 이것보다 좀 더 간단하고 널리 보편화된 방법이 있습니다. # 해결 코드 먼저 보겠습니다. T = int(input()) for _ in range(T): 위 코드와 같이 작성하면 테스트 케이스를 입력받는 첫 번째 행과, 테스트 케이스 만큼 반복을 진행해 줄 두 번째 행, 총 2줄만으로 표현할 수 있습니다. 이 코드를 더 줄일 수도 있습..
https://www.acmicpc.net/problem/1000 # 문제상황 1 파이썬은 C와 달리 띄어쓰기를 기준으로 입력을 나눠 받지 않습니다. 다시 말하자면 입력으로 다음과 같은 두 숫자가 주어졌을때, 입력1. 1 2 입력2. 1 2 C는 입력1과 입력2를 같은 입력이라고 받아들이지만 파이썬은 그렇지 않습니다. 입력1의 경우에는 '1'과 '2'라는 2개의 입력을 인식하고, 입력2의 경우에는 '1 2'라는 하나의 입력을 인식하게 되는 것입니다. # 해결 1 split이라는 함수를 활용합시다. split은 문자열을 '특정 문자'를 기준으로 나눈 뒤 리스트로 반환하는 함수입니다. 기준이 될 '특정 문자'는 괄호 안에 써넣어 줌으로써 지정해줄 수 있습니다. 괄호 안을 비워두면 모든 '공백 문자'를 기준으..
버킷의 상태 구조체 각각의 버킷(해시 값)이 비어있는지, 데이터가 들어와 있는지, 들어왔다가 삭제됐는지를 표시합니다. 자료형은 'Status'를 사용합니다. 버킷 구조체 해시 테이블에 있는 버킷 하나 하나에 대한 형식입니다. 자료형은 'Bucket'을 사용합니다. 해시 테이블 구조체 해시 테이블 전체에 대한 형식입니다. 자료형은 'ClosedHash'를 사용합니다. 함수 01 hash - 해시 함수 원본 데이터 값 key와 최대 용량인 size를 이용해 해시 값을 생성하여 반환합니다. 함수 02 rehash - 재해시 함수 새로운 데이터를 해시 테이블에 삽입할 때, 이미 겹치는 해시 값이 있는 경우 새로운 방법으로 해시 값을 계산합니다. 원본 데이터 값 key와 최대 용량인 size를 이용해 새로운 해시..
버킷 구조체 버킷이란 해시 테이블에 들어 있는 각각의 노드를 의미합니다. 해시 테이블에 있는 노드 하나 하나에 대한 형식입니다. 자료형은 'Node'를 사용합니다. 해시 테이블 구조체 해시 테이블 전체에 대한 형식입니다. 자료형은 'ChainHash'를 사용합니다. 함수 01 hash - 해시 함수 원본 데이터 key와 최대 용량 size를 이용해 해시 값을 생성하여 반환합니다. 함수 02 SetNode - 노드 값 설정 노드 n에 넣고 싶은 값(데이터 x, 다음 노드에 대한 포인터 next)을 넣습니다. 함수 03 Initialize - 해시 테이블 생성 최대 용량이 size인 해시 테이블 h를 생성합니다. 함수 04 Search - 해시 테이블에서 특정 데이터 검색 해시 테이블 h에서 데이터 x가 들..
집합의 자료형 집합 전체에 대한 자료형입니다. 자료형 'BitSet'을 사용합니다. 'BitSetNull'은 공집합, 즉 {0}입니다. 'SetOf(no)'은 유일한 원소가 no인 집합, 즉 {no}입니다. 'BitSetBits'은 비트 벡터에서 유효한 비트 수입니다. 여기서는 32, 즉 0부터 31까지의 정수만을 원소로 가질 수 있습니다. 함수 01 IsMember - 집합에 특정 원소가 들어있는지 알아내기 집합 s에 원소 n이 들어있으면 1을, 들어있지 않다면 0을 반환합니다. 함수 02 Add - 원소 추가 집합 s에 원소 n을 추가합니다. 함수 03 Remove - 원소 삭제 집합 s에 원소 n을 삭제합니다. 함수 04 Size - 집합에 들어 있는 원소 개수 알아내기 집합 s에 현재 들어 있는 ..
집합 구조체 집합 전체에 관한 형식입니다. 자료형은 'IntSet'입니다. 함수 01 Initialize - 집합 생성 최대 용량이 max인 집합 s를 생성합니다. (함수의 성공 여부를 반환합니다.) 함수 02 IsMember - 집합에 원소가 존재하는지 알아내기 집합 s에 원소 n이 존재한다면 그 인덱스를 반환합니다. 함수 03 Add - 원소 추가 집합 s에 원소 n을 추가합니다. 함수 04 Remove - 원소 삭제 집합 s에 원소 n을 삭제합니다. 함수 05 Capacity - 집합의 최대 용량 알아내기 집합 s의 최대 용량을 반환합니다. 함수 06 Size - 집합에 들어 있는 원소 개수 알아내기 집합 s에 현재 들어 있는 원소가 몇 개인지 반환합니다. 함수 07 Assign - 집합 2를 집합..
노드 구조체 트리에 있는 노드 하나 하나에 대한 형식입니다. 자료형은 'BinNode'입니다. ※ 트리 전체에 대한 형식은 필요 없습니다. 함수 01 AllocBinNode - 노드 생성 노드 1개 크기의 공간을 생성한 뒤, 이 노드를 가리키는 포인터를 반환합니다. 함수 02 SetBinNode - 노드 값 설정 노드 n에 넣고 싶은 값(데이터 x, 왼쪽 자식 노드에 대한 포인터 left, 오른쪽 자식 노드에 대한 포인터 right)를 넣습니다. 함수 03 Search - 원하는 데이터 검색 p를 루트 노드로 하는 트리에서 데이터 x가 있는 노드를 찾아, 그 노드에 대한 포인터를 반환합니다. 함수 04 Add - 노드 삽입 p를 루트 노드로 하는 트리에 데이터 x를 삽입한 후, 삽입한 노드에 대한 포인터..