본문 바로가기

코딩

(102)
[openGL][python3] 미니멀 태양계 결과물은 위와 같다. 태양, 지구, 명왕성, 그리고 지구를 회전하는 인공위성이 있다. 인공위성은 공전축이 매 회전마다 조금씩 바뀌고 명왕성은 공전궤도가 타원이다. 왼쪽위부터 태양계 전체를 보는 화면, 태양에서 12시 방향의 우주, 명왕성에서 본 지구, 지구의 한국에서 본 하늘 을 표현하고 있다. constant.py는 전역변수들을 저장하고 있다. 물론 이것도 과제다. main.pyfrom OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from constant import * import math def drawSatellite(): global satelliteRevolveAxisCount global satelliteNowX..
[openGL][python3] 미니멀 당구 파이썬과 openGL을 이용하여 조그마한 당구장을 만들었다 물론 학교 과제다 결과물은 위와 같다. 기본적으로 카메라가 회전을 하고(회전 여부를 키보드로 설정 가능) h를 눌리면 공이 랜덤한 방향으로 움직인다 그러다 당구장 벽면에 부딪치면 튕긴다. 벽면에 부딪치는건 간단하게 방향벡터를 x축 대칭이나 y축 대칭을 하는것으로 해결했다. 또한 마찰에 의해서 속도가 조금씩 느려진다. 이것은 간단하게 속도를 프레임마다 조금씩 늦추는 것으로 구현했다. 아래를 클릭하면 다운 가능하고, floor.jpg와 wall2.jpg는 간단한 텍스쳐이다. 저작권 문제가 있을 수 있기 때문에 업로드를 하지 않으니, 혹시 실행해보고 싶으신 분들은 구글링으로 아무거나 검색해서 다운받으시면 된다. from OpenGL.GL import ..
백준 10451 순열사이클 이 문제의 특징은 '어떠한 노드 s를 목적지로 하는 노드는 1개, 이 s 노드에서 시작하는 노드도 1개'라는 것이다. 이걸 전문용어로 뭐라 있을거 같은데 흠.. 여튼, 그렇기 때문에 bfs같은 탐색을 할 필요 없이 선형으로 탐색하면 된다. 첫번째 반복문은 아직 탐색하지 않은 루트 노드를 선택하는데 쓰고 두번째 반복문은 이 노드로부터 시작하는 사이클을 찾는데 쓴다 탐색을 하다가 이미 방문한 노드를 발견하면 주저없이 반복문을 끝내고 사이클의 갯수를 1증가 시키면 된다. 왜냐하면 위에서 말한 특징 때문에 '이미 탐색한 노드 x를 지금 탐색하였다면 그 x노드는 탐색을 시작했던 노드'라는 명제가 성립하기 때문. #include #include #include #include #include #include usi..
백준 1325 효율적인 해킹 여타 다른 BFS 문제처럼 각 노드별로 그 노드에서 도달할 수 있는 노드의 갯수를 계산해서 최대값을 가진 노드(들)을 출력하면 되는 문제이다. 그런데 이 문제는 4가지의 특징을 가지고 있다. 1. 메모리 평소에 하듯이 adj 배열을 2차원 배열로 선언해버리면 10000 * 10000 * 4byte = 381MB의 메모리를 먹고 short를 써도 190MB를 먹는다 따라서 가변 배열을 써야 한다. 링크는 10만개로 한정되어 있으니 가변 배열을 쓸 경우 100,000 * 4byte라서 1메가도 안된다. 2. 방향그래프 이 그래프는 다른 문제와 다르게 방향 그래프이다 "A가 B를 신뢰한다" 라는 문장은 B->A 와 동치이다. 이것을 유념해두고 문제를 풀어야 한다. 3. 입력 만약 cin으로 입력을 받으면 입력..
백준 1890 점프 혹시 백준에서 채점 돌렸는데 잘 맞추다가 후반부에서 오답나오신분이시라면 결과 출력을 long long으로 했는지 체크하세용 저도 첨에 long long 박아놨다가 막판 출력을 int로 하는 바람에 형번환 되서 한번 틀렸네요 ㅎㅎ BFS문제 풀려고 BFS 눌렸는데 왠 DP문제가 떠서 그냥 풀었다 r만큼 떨어져있는 노드에서 r만큼의 점프가 가능한지 검사하여 가능할 경우 해당 노드까지 도달할 수 있는 경로의 수를 더하는 알고리즘이다 점화식은 아래와 같다. D[i][j] = D[i-r][j] + D[i][j-r], r = [1..9] (if arr[i-r][j] == r, arr[i][j-r] == r) DP는 점화식만 세우면 빠르게 모델링하여 풀수 있다. #include #include #include #in..
백준 10216 Count Circle Groups 노드별로 거리를 계산하고 서로가 통신거리 이내에 있는 노드라면 두 노드를 이어준다( = adj 에 추가한다) 그 후 모든 노드가 탐색될 때 까지 BFS탐색을 여러번 진행하면서 그래프가 몇개 있는지 계산한다. #define getDist(x0,y0,x1,y1) ((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)) #define dbl(r) (r*r) #include #include #include #include #include #include using namespace std; int testcases; int N; int enemy[3001][3]; bool isVisit[3001]; int enemyNum; int adj[3001][3001]; int adjSize[3001]; int mai..
백준 2667 단지번호 붙이기 2차원 배열을 0,0부터 순차적으로 탐색하다가 집을 만나면 그 집을 루트로 하여 BFS를 시작한다 이 문제에서 약간 다른점은 굳이 isVisit를 쓸 필요가 없다는 것이다. arr[i][j]에서 이미 단지 번호를 붙였고 단지 번호가 붙여져있다는 것은 이미 방문했다는 뜻이니까 isVisit로 방문한지 체크하지 않고 단지 번호가 붙여져있는 것으로 방문한지 체크하면 되기 때문 그 외에 단지 번호를 0부터 붙이고 싶어서 빈땅, 집이 있지만 단지 번호가 붙여지지 않은 집, 단지 번호가 붙여진 집 을 서로 구분하기 위해서 입력을 받을때 0과 1로 받지 않고 -2와 -1로 받았다. #include #include #include #include #include #include using namespace std; i..
[python3] 백준 2739 구구단 숏코딩 python3으로 짰다. 별거 아니지만 숏코딩 순위권... 심심해서 했다n=int(input()) for a in range(1,10):print(n,"*",a,"=",n*a)