본문 바로가기
  • 비둘기다
  • 비둘기다
  • 비둘기다

전체 글53

논문 리뷰) NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 링크) 논문 다운로드 해당 논문 데이터 먼저 NeRF에 대하여 본격적으로 들어가기 전 제목에 있는 View Synthesis에 대해 파악하고 들어가는 것이 좋다고 생각합니다. View는 ‘시야’, Synthesis는 ‘합성’이라는 사전적 의미를 가지고 있습니다. 이로 미루어 보았을 때, 시야를 합성한다는 것은 사진에 실제로 보이지 않더라도 우리가 사물의 특정 시점에서의 모습을 알고 있다면 예측을 통해 이를 3D로 바꿀 수 있다는 것입니다. 위 사진을 예로 들어보겠습니다. 사진에서는 두 사람의 모습을 배꼽 정도의 높이에 특정 앵글에서 표현했습니다. 흔히 영화에서 이런 기법이 자주 사용되곤 하죠. 임의의 관찰자의 시점으로 장면을 본 것입니다. 지금은 여배우가 등을 보이고 있지만 제가 만약 똑같은 배꼽 높이에.. 2024. 7. 21.
[Data Structure] 스택(Stack) 이번에는 스택에 대해 다뤄보려고 합니다. 흔히 사용하는 표현 중에서 스택을 쌓는다는 말이 있습니다. 즉, 쌓는다는 말을 사용하듯 밑에서부터 위로 올라가는 형식임을 알 수 있습니다. 만약 접시를 차곡차곡 쌓는다고 해보겠습니다. 10개를 쌓았는데 그중 6번째 접시를 빼내고 싶으면 10부터 7까지의 접시를 빼낸 후 6번째 접시를 빼냅니다. 스택에서는 접시 대신 자료가 들어가는 셈입니다. 스택의 형태는 위의 그림과 같습니다. 내가 원하고자 하는 요소를 얻기 위해서는 그 위에 있는 모든 요소를 빼낸 후 볼 수가 있기 때문에 후입선출 리스트라고 할 수 있습니다. 후입선출은 Last-In-First-Out으로 마지막에 들어온 게 가장 먼저 나간다라는 뜻입니다. 스택에는 연결리스트나 기타 자료구조와는 다르게 top이라.. 2023. 7. 4.
[자료구조] 백준 14425번(파이썬) : 문자열 집합 #include #include int main() { int origin, compare; scanf("%d %d", &origin, &compare); // 입력한 개수에 맞게 메모리 할당 char originalWords[origin][100]; char compareWords[compare][100]; // 원본 단어 입력 for (int i = 0; i < origin; i++) { scanf("%s", originalWords[i]); } // 비교 단어 입력 for (int i = 0; i < compare; i++) { scanf("%s", compareWords[i]); } // 완전히 같은 단어 개수 계산 int same = 0; for (int i = 0; i < origin; i++.. 2023. 5. 31.
[스택] 백준 2493번 (C언어) : 탑 #include int tower[500001]; int result[500001]; int main() { int num; tower[0] = 100000001; scanf("%d", &num); for (int i = 1; i = tower[i]) { printf("%d ", j); result[i] = j; break; } else j = result[j]; } } return 0; } 위 문제는 스택을 써서 풀어야 한다고 했지만, 일단 스택을 생각하지 않고 먼저 c언어로 구현해 보았습니다. 일단 탑의 높이를 받아줄 배열 하나와 최종 값에 대한 배열 하나를 생성합니다. for문을 살펴보면 일단 현재 인덱스를 가리키는 i와 이전의 인덱스를 가리키는 j가 있습니다. 만약 이전의 탑이 이후의 탑보다 높다.. 2023. 5. 19.
[스택] 백준 2504번 (파이썬) : 괄호의 값 문제를 요약하자면 소괄호와 대괄호에 따라 연산을 다르게 처리한다는 것이다. 코드로 구현하면 다음과 같다. b = list(input()) s = [] answer = 0 num = 1 for i in range(len(b)): if b[i] == "(": s.append(b[i]) num *= 2 elif b[i] == "[": s.append(b[i]) num *= 3 elif b[i] == ")": if not s or s[-1] == "[": answer = 0 break if b[i-1] == "(": answer += num s.pop() num //= 2 else: if not s or s[-1] == "(": answer = 0 break if b[i-1] == "[": answer += n.. 2023. 5. 19.
[Data Structure] 연결 리스트2(Linked List2) 이번 포스팅에서는 이전에 다뤘던 연결 리스트의 개념을 이용한 리스트인 원형 연결 리스트와 이중 연결 리스트에 대해 얘기해보려 합니다. 먼저 원형 연결 리스트입니다. 원형 리스트는 기존의 단일 연결 리스트에서 마지막 노드가 NULL이 아닌 head가 가리키는 첫 번째 노드를 가리킨다는 것이 차이점입니다. 일반적인 연결 리스트에서는 link가 한 방향으로 흘러가기 때문에 마지막 노드는 무조건 NULL을 가리킵니다. 그러나 원형 연결 리스트에서는 위와 같은 구성을 띄게 함으로써 원형과 같은 형태로 구성합니다. 원형 연결 리스트에 있어서 주의할 부분은 딱 하나입니다. head를 가리키는 마지막 노드의 link에 대한 처리입니다. 만약 insert를 해준다고 할 때, 중간에 값을 삽입하는 것은 기존과 같습니다. .. 2023. 5. 18.