Array와 Pointer의 관계 메모리 주소에 직접적으로 접근할 수 있다는 장점이 있는 Pointer라는 개념은 Array와 밀접한 관련이 있다. 왜냐하면 Array는 메모리에 연속적으로 값을 저장하고, Array를 초기화한 변수 자체는 Array의 첫 번째 요소의 주소를 담고 있기 때문이다. 다음 예시를 통해 Array와 Pointer의 밀접한 관계를 이해할 수 있겠다. #include using namespace std; int main() { int x[] = { 2, 3, 4, 5 }; cout
simple I/0각 언어마다 입출력을 할 때 장단점이 있는 듯하다. C++에서는 먼저 받아올 변수의 자료형을 선언하고, 공백을 활용하여 해당 변수에 맞는 자료형으로 할당할 수 있다. 변수의 자료형을 미리 선언하는 것 빼고는 Python과 달라 보이지 않고 오히려 불편한데, 여러 자료형을 한 번에 받아올 수 있다는 점은 반대로 장점이 된다. 두 코드를 통해 차이를 이해해 보자. Python# 받아올 자료형이 같을 때: 공백을 기준으로 나눠서 할당 a, b = map(int, input().split()) # 받아올 자료형이 다를 때: list로 받아온 후 자료형 변경 # ex) input: '사과 3' arr = list(input().split()) b = int(arr[1])자료형이 같을 때에는 ma..
오랜만에 C와 C++ 공부를 다시 시작하게 되면서 그동안 쓸 일이 없었던 Pointer의 개념을 다시 정리해보려 한다. 하나의 scope 안에서 변수의 값을 초기화하고 변경하는 경우에는 아무런 문제가 없겠지만, 함수를 사용하는 과정에서 영구적으로, 혹은 완벽하게 해당 변수의 값을 변경하려고 한다면 반드시 알아야 하는 개념이 바로 포인터다. 또 다른 고급 언어(Python, Java 등)에는 없는, 메모리에 직접 접근할 수 있다는 것도 포인터가 지닌 장점 중 하나이다. 포인터로 할 수 있는 것 포인터 변수에는 변수가 저장된 메모리의 특정 장소, 즉 메모리 주소값을 저장할 수 있다. 포인터 변수에 변수의 메모리 주소값을 저장하고, 포인터 변수를 통해 해당 변수를 참조해서 값을 바꿀 수 있다. 또 필요한 경우..
14915번: 진수 변환기 변환한 n진수의 수를 출력한다. 11~16 진수의 경우 10 이상의 수는 A~F 문자를 사용한다. 예를 들어, 10은 A, 11은 B, 12는 C, 13은 D, 14는 E, 15는 F를 사용한다. www.acmicpc.net 해당 문제는 10진법인 수를 2에서 16진법의 수로 표현하는 문제이다. 어렵다기보다는 내장 모듈이 많은 파이썬 언어의 특성상 이번에도 진수 변환을 해줄 함수를 찾는 와중에 재귀로 구현한 참신한 코드를 발견하고 코드 리뷰를 해보려 한다. 먼저 해당 함수 선언은 두 가지 파라미터를 갖고 있다. 10진수의 정수(n), 변환할 base진수(base) def convert_notation(n, base): 해당 문제는 2, 8, 16진수으로의 변환뿐만 아니라 3이나..
1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 이진트리에서 순회하는 종류는 세 가지가 있다. 루트 노드를 기준으로 루트 노드 - 왼쪽 자식 트리 - 오른쪽 자식 트리를 순차적으로 방문하는 전위 순회, 왼쪽 자식 트리 - 루트 노드 - 오른쪽 자식 트리를 순차적으로 방문하는 중위 순회, 그리고 마지막으로 왼쪽 자식 트리 - 오른쪽 자식 트리 - 루트 노드를 방문하는 후위 순회다. 재귀함수 심화 대표 문제인 하노이탑 이동 순서처럼, 방문하는 순서에 맞게 재귀를 돌려주고 그 안에서 루트 노드를 로그 프..
2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 고등학교 확률과 통계 시간에 경우의 수 파트에서 다루는 내용이다. 주어진 동전의 종류에 따라, 합을 만들 수 있는 경우의 수를 구하는 문제이다. 처음에는 경우의 수 문제를 풀듯이 가장 가치가 큰 동전부터 하나씩 줄여가며 갯수를 세주는 방식으로 구현하였는데, 동전 종류의 개수가 고정이 아니므로 재귀를 활용하였다. import sys sys.setrecursionlimit(10**9) n, k = map(int, input().split()) coins = list(..
1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 자연수 N이 주어졌을 때, N보다 작은 연속하는 소수들의 합이 N과 같을 경우의 수를 구하는 문제이다. N의 최댓값이 4,000,000이므로, 소수 판별에 있어서는 에라토스테네스의 체를, 연속합은 투 포인터 알고리즘을 통해 시간복잡도 O(n)으로 구현하였다. N = int(input()) # 예외 처리 if N == 1: print(0) exit(0) # 소수 판별 by 에라토스테네스의 체 sosu = [True for _ in range(N + 1)] number = list() for i in range(2, N + 1): if sosu[i]: for j in range(i, ..
11401번: 이항 계수 3 자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오. www.acmicpc.net PS의 난이도가 올라가다 보면 같은 문제를 좀 더 효율적인 시간, 공간 복잡도로 구현해야 하는 순간이 온다. 이항 계수를 구할 때 n의 값이 너무 크면 메모이제이션(dp)으로도 해결하지 못한다. 문제가 요구하는 정답이 이항 계수의 모듈러 연산 값이라면, 페르마의 소정리와 곱셈의 역원을 활용하여 답을 찾을 수 있겠다. 페르마의 소정리 p가 소수라면, $$ a^{p - 1} \equiv 1\pmod{p} $$ 해당 식의 좌변과 우변이 동치이므로, $$\therefore a \times a^..
- Total
- Today
- Yesterday
- 곱셈의 역원
- CSV
- Array
- how to remove border of tabbarcontroller
- 알고리즘
- 파이썬
- TIP
- pyrebase
- 보라매사옥
- Python
- BOJ
- HTML
- 정보시각화
- how to start without storyboard
- DP
- 하노이탑이동순서
- Javascript
- SceneDelegate
- PS
- xcode
- D3
- DFS
- 백준
- swift
- 백트래킹
- SVG
- 자료구조
- ios
- CSS
- c++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |