본문 바로가기

분류 전체보기253

[OpenGL] 삼각형 그리기 일반 삼각형 일반적인 삼각형을 생성합니다. GL_TRIANGLES를 파라미터로 받습니다. glBegin(GL_TRIANGLES); glVertex3f(x1, y1, z1); glVertex3f(x2, y2, z2); glVertex3f(x3, y3, z3); glEnd(); 삼각형 스트립 여러 개의 삼각형으로 이루어진 스트립을 생성합니다. GL_TRIANGLE_STRIP 파라미터를 사용합니다. glBegin(GL_TRIANGLE_STRIP); glVertex3f(x1, y1, z1); glVertex3f(x2, y2, z2); glVertex3f(x3, y3, z3); glVertex3f(x4, y4, z4); glVertex3f(x5, y5, z5); glEnd(); 삼각형 팬 하나의 중심점을 기준으로.. 2023. 4. 24.
[컴퓨터그래픽스] 히스토그램 평활화 vs 명암 대비 스트레칭 둘 다 기존 이미지 명암을 개선하기 위해 사용하는 이미지 처리 기법인데, 두 기법의 차이는 무엇인가요? 유투브에서 이해하기 좋은 내용을 보고 블로그 글로 작성합니다. 히스토그램 평활화 (Histogram Equalization) 기존 영상의 명암 값 분포를 재분배하여 일정한 분포(주로 정규분포)를 가진 새 히스토그램을 생성합니다. 평활화 단계 1. 입력 영상의 히스토그램 생성 2. 빈도수의 누적값 계산 3. 누적값 정규화 (N은 전체 픽셀 수 입니다.) 4. 정규화한 값을 통해 영상 생성 명암 대비 스트레칭 (Contrast stretching) 기존 영상의 분포 형태를 유지하되, 최댓값과 최솟값을 활용하여 스트레칭합니다. 주로 중앙에 빈도수가 몰려있는 영상을 처리할 때 유용한 기법입니다. 계산 두 기법.. 2023. 4. 19.
[프로그래머스] 게임 맵 최단거리 접근 DFS 또는 BFS로 풀 수 있지만 DFS로 풀었다가는 TLE에 걸릴 수 있다는 점에 명심해야 한다. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/1844 솔루션 def solution(maps): ROW_length = len(maps) COL_length = len(maps[0]) visited = [[False for _ in range(COL_length)] for _ in range(ROW_length)] queue = [[0,0,1]] while queue: ROW, COL, DIST = queue.pop(0) # 조건에 맞지 않는 경우는 모두 추가 탐색하지 않습니다. if ROW ROW_leng.. 2023. 4. 16.
[Kotlin] 코틀린 Nullability 해당 변수가 Null 임을 확인하기 위해 다른 언어는 조건문 등을 통해 null exception을 잡아주어야 합니다. 간단한 소프트웨어 개발에는 크게 문제가 되지 않지만 규모가 커지면서 예외처리를 잡아주기 위한 코드는 배가 됩니다. 코드의 가독성과 효율이 낮아집니다. 이러한 문제를 코틀린에서는 MZ하게 해결합니다. null 가능한 변수 선언 코틀린에선, 일반적인 변수 선언 후 값으로 null 을 저장할 수 없습니다. fun main() { val name: String = null } // 에러 : Null can not be a value of a non-null type String 그러나 ? 연산자를 변수 선언 시 같이 작성하는 경우 null 또한 저장이 가능합니다. fun main() { val.. 2023. 4. 16.
[프로그래머스] 달리기 경주 접근 처음에 O(N^2)로 솔루션을 작성했지만 당연히 TLE 해시 자료구조를 사용하여 문제를 O(N)으로 풀어야 한다. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/178871 솔루션 def solution(players, callings): Hash = {} for index, value in enumerate(players): Hash[value] = index for index, value in enumerate(callings): rank = Hash[value] # swap in players players[rank-1], players[rank] = players[rank], players[rank-1] # swap rank.. 2023. 4. 15.
[LeetCode] 71. Simplify Path 접근 stack과 array 탐색을 통해 문제를 해결해야 함을 알았으나 코드를 논리적으로 짜지 못하였음. 효율적인 로직을 짜는 것에 대한 훈련이 필요해 보임 문제 링크 Simplify Path - LeetCode 솔루션 class Solution: def simplifyPath(self, path: str) -> str: stack = [] word = "" for char in path + "/": if char == "/": # if .. -> delete lastest stack if word == "..": if stack: stack.pop() # if none of them and not an empty word, add stack elif word != "" and word != ".": s.. 2023. 4. 12.