Log Stash

as an Industrial Personnel

프로그래밍 24

Code jam 2016 quals round (D, Fractiles)

문제 링크 : https://code.google.com/codejam/contest/6254486/dashboard#s=p3 문제 이번껀 줄이기 귀찮아서 그냥 통짜로 옮겨 놓는다. 오랜 옛날, 어떤 프랙탈 부족이 타일을 쭉 늘어놓는 예술 작품을 만들며 살아왔다. 그 프랙탈 부족은 두 가지의 타일을 사용했는데, 하나는 금(G)이고 하나는 납(L)이었다. 각 프랙탈 예술 작품은 최초 타일 갯수 K,와 복잡도 C의 두가지 변수로 나타낼 수 있다. 일단 주어진 최초 타일들에 대해서, 최초 타일열 작품 그 자체는 복잡도 1을 가진다. 그리고 복잡도 X+1의 작품은 복잡도 X의 작품을 다음과 같은 규칙으로 변형 해서 만들 수 있는데, 복잡도 X 작품에서 모든 L타일은 그 복잡도 X 작품 자체로 치환된다.복잡도 X..

프로그래밍 2016.11.11

Code jam 2016 quals round (C, coin jam)

문제 링크 : https://code.google.com/codejam/contest/6254486/dashboard#s=p2코드잼 세번째 문제지만, 다른 친구들이 다들 여기서 막히는걸 보고 그냥 D번부터 풀었어서 이 문제는 가장 마지막으로 풀었다. 가장 시간 투자가 적은 문제라 그런지 (끝나고 치킨먹기로 해서..) 그냥 직관적인 로직 그대로 짜서 small set은 풀었는데 large set은 못 풀었다. 문제 요약 한줄요약 : J길이의 잼코인(jamcoin)과, 잼코인 하나당 각 진수(base)에 대한 고유 약수(non-trivial divisor) 9개씩을 N개 만드는 프로그램을 만들어라. 여기에서 잼코인이란 다음과 같은 속성을 만족하는 숫자열인데, 모든 숫자들은 0이나 1이어야함.첫번째와 마지막 ..

프로그래밍 2016.11.08

Code jam 2016 qualification round A, B

코드잼 페이지 : https://code.google.com/codejam/contest/6254486/dashboard#s=p0 지난 2016년 4월 9일, 동아리 사람들끼리 학교에 강의실 하나 빌려서 구글 코드랩 퀄리피케이션 라운드 문제를 각자 풀어보는 시간을 가졌다. 총 4개의 문제가 나왔었고 다른 코드잼에서처럼 문제당 각각 small, large set 두가지 set에 대해서 정답을 제출할 수 있었다. 27시간동안 진행되며, 최소 30점 이상을 획득해야 다음 '예선' 코드잼에 참가 가능. 아마 전세계 동시 시작이다보니 시차때문에 시간을 많이준것 같고, 최소 점수도 낮은걸로 봐서 진짜 퀄리파잉 목적으로만 진행된것 같다. 알고리즘 문제는 잘 푸는건 아니지만 (전에 weird 포스팅만 봐도…) 오랜만에..

프로그래밍 2016.11.02

Cost Amortization

원래 경영쪽 용어로 알고 있는데, Cost amortization은 어떤 큰 지출을 여러달 (또는 시간, 일, 년도등 맘대로) 에 나눠서 적는걸 말한다. 예를들어 적당히 큰 회사가 슬랙 메신저의 standard 플랜을 구독한다고 생각해보자. 지금 얘네들 가격 정책에 따르면 한 명의 액티브 유저당 한달에 $6.67를 1년마다 지불하게 되어있는데, 이걸 고대로 장부에 적으면 11개월동안 아무 일 없이 잠잠하다가 12개월째 되는달에 수백 달러를 지출하는 꼴이 되어버린다. 이러면 보기에도 안 좋고 달마다 얼마나 썼는지 알 수도 없으니 이 금액을 나머지 잠잠한 11개월에 적당히 뚝 떼어서 공평하게 나눠서 적는다. 대충 이런식인걸로 알고 있다. 하지만 원래 뜻을 알기 전에는 computer science쪽 용어인줄..

프로그래밍 2016.10.30

위도 경도에 맞춰서 지구본 돌리기 - unity

유니티에서 지구 텍스쳐가 씌워진 스피어를 주어진 위도 경도를 찾아가도록 회전시켜야 할 일이 있었다. 일단 옛날에 플레이하던 록맨x7 스테이지 셀렉트 장면 가운데에 지구굴러가는 모습이 떠올랐다. 록맨X7의 스테이지 셀렉트씬, 1분17초 부터 지구가 굴러간다. 어차피 2D처럼 화면에 그려지느라 카메라 위치는 고정되어있고, 다른 요인으로 회전값이 바뀌거나 하지 않으니 (뷰 스페이스에서 간섭이 없으니) 그냥 월드 스페이스에서 회전시키기만 하면 됐었다. 그러면 위도, 경도를 이용해서 회전각을 알아내야 하는데, 이것도 중간에 삽질을 많이 해서 그렇지 그렇게 어렵진 않다. 위도, 경도는 구면 좌표계상의 한 점을 표현할때 쓰는 값이니 (고도는 그냥 1로 퉁친다) 이걸 변환 공식을 통해 직교 좌표계로 바꿀 수 있다. 처..

쿼터뷰 좌표계를 직교 좌표계로 변환해서 현재 위치 타일 좌표 검사하기

방향키로 조종하면 왼쪽의 쿼터뷰에 있는 글자가 움직인다. 제목은 길게도 써놨는데 별거 없다. 고1 때였나 아무튼, 저런 쿼터뷰 형식의 게임 맵에서 현재 플레이어가 어느 타일 위치에 있는지를 알아야 했었다.(아마) 그래서 그때 당시에는 모든 마름모의 각 변을 일차 함수로 표현하고 플레이어 좌표가 함수값 위에 있는지 아래에 있는지 검사하는 방법을 썼었다. 타일 갯수만큼 반복문이 들어가기 때문에 당연히 갯수가 많아질수록 점점 느려지더라. 선형대수 시간에 벡터공간 파트에서 기저벡터에 대한 설명을 듣다가 저 문제가 생각났다. (그 때 이후에도 몇번 쿼터뷰에 대한 고찰을 할 기회가 있었지만 그냥 별 생각 안하고 있었다) 평소에 자주 쓰는 직교 좌표계는 (1,0)과 (0,1)을 기저벡터로 삼는 벡터공간이라고 할 수 ..

프로그래밍 2015.01.27

라그랑주 보간법을 이용한 달팽이 배열 만들기

아마 고2 때였을거다. 당시에는 디씨 프로그래밍갤을 종종 눈팅 하곤 했었다. 당시 자주 돌아다닌 비슷한 떡밥으로는 '1부터 100까지 더하기'나 '별찍기' 따위가 있었는데, 이때 프갤러들은 이런 문제들을 각자 웃기거나, 변태같은 방식으로 풀고 자랑하며 놀곤 했다. (제목을 '1 부터 100까지 더하는 획기적인 알고리즘' 이라고 해놓고 내용에는 printf("5050\n"); 을 적어 놓는다거나 하는) 어느날 프갤에 달팽이 문제 떡밥이 돌아다녔었다. 달팽이 문제도 1-100이나 별찍기와 마찬가지로, 프로그래밍을 처음 배우는 사람이 기초적인 문법까지 보고나서 풀어보는 간단한 응용한 문제중에 하나인데, N by N 2차원 배열에 달팽이 집 모양 처럼 나선 모양대로 정수값을 채워넣는 문제이다. 예를 들면 이런식..

프로그래밍 2015.01.26

알고스팟 weird 문제

이번엔 '알고스팟 초보용 문제' 카테고리에 있으나 개인적인 두뇌 성능이 좋지 않아 장장 2년 가까운 세월동안 13번의 시도후에 정답 판정을 받아낸 WEIRD 문제에 대해서 이야기를 해보겠다. 문제 링크 : https://algospot.com/judge/problem/read/WEIRD 젠장.. 문제를 한 문장으로 요약하면 'abundant하면서 semiperfect하지 않은 자연수를 이상한 숫자라고 하는데 어떤 숫자가 주어졌을때 이게 이상한 숫자인지 아닌지 판단해내라.' 라고 할 수 있다. 알고스팟 문제도 그렇고 링크 걸어놓은 위키피디아도 죄다 영어라서 읽기 귀찮기 때문에 여기에다 정리한다. 어떤 수가 Abundant 하다는것은 그 수의 진 약수(자기 자신보다 작은 약수)의 합이 그 수보다 큰 경우를 ..

프로그래밍 2015.01.24

stl에는 iterator가 없는 컨테이너도 있다.

>>2013-10-09에 구글 드라이브에 작성.>>2015-01-13에 에버노트로 이동. 1.이야기회사에서 타일맵 위에서의 A-star 길찾기 알고리즘을 구현할 일이 생겼었다. astar는 고3 때 수능 끝나고 만들던 게임에서 이미 한번 구현 해 봤었고 언어는 java로 회사 엔진에서 쓰는 C++과는 다르지만 그 때의 소스코드도 남아있었기 때문에 그냥 레거시 코드에 맞춰서 적당히 수정해 주면 된다고 생각했었다. 오브젝트가 움직일 수 없는 타일 마스킹 하는 배열 추가, 로직에 맞춰 쓸모없는 코드를 정리해 주기만 하면 문법상 다른 부분만 살짝 고치면 됐으니까. 다른 부분은 다 생각대로 됐었는데 한 가지 문제가 생겼던 부분이 있었다. 예전 자바 코드에는 open list의 container를 F값을 기준으로 ..