[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

2016년 9월 6일 화요일

[JAVA] Baekjoon 각 자리수가 등차수열을 이루는 지 판별하는 함수를 구현해 문제를 해결해봅니다..

문제
어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

이번에는 등차수열이란다.. 아흠.. 등차수열 너무 오래전 얘기라 먼소린지도 모르겠고, 우선 개념부터 잡아야지 하면서 검색하고 있었다.. 그런데 역시나 내 스탈상 정의만 봐서는 이해가 안가고.. 혹시 누군가 부연 설명을 좀 해주지 않았을까 하는 마음에 더 검색을 해봤다..

그런데 역시나 위대한 분들은 세상에 너무 많으시더란 말이지.. occidere 님의 블로그를 가보니 해당 알고리즘에 대한 문제 풀이와 실질적으로 필요한 내용들에 대해서 정리를 잘 해주셨다.. 그래서 문제를 보면서 이해를 할 수 있었다.. 다만, 단번에 이해가 안가서 여러번 읽어봤다능.. ㅠㅜ

 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
32
33
34
35
36
37
38
39
40
package step5;

import java.util.Scanner;

public class FuncHanSu {

    @SuppressWarnings("resource")
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        
        //int valA = 110;
        int valA = scan.nextInt();
        int valK = 0;
        int valHan = 0;
        int varArr[] = new int[3];
  
        for(int i = 1; i <= valA; i++) {
            if(0 < i && i < 100) {
                valHan = i;
            
            } else if(i == 1000) {
                break;
           
            } else {
                valK = 0;
                int valT = i;
                while(valT > 0) {
                    varArr[valK] = valT % 10;
                    valT /= 10; valK++;
                }
                if(varArr[0] - varArr[1] == varArr[1] - varArr[2]) {
                    valHan++;
                }
            }
        }
        System.out.println(valHan);
    }

}//





[JAVA] Baekjoon 자연수 n에 대해 d(n)의 값을 구하는 함수를 정의해 문제를 해결해봅니다..

오랫만에 코딩 테스트를 올려본다.. 이제 곧 있음 명절인데 모두 즐거운 명절을 맞이 하시길 바라며..

문제
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.

양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 

예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다. 

생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력
입력은 없다

출력
10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.

해당 문제는 나 스스로 풀진 못했다.. 다른 분이 하신 것을 보면서 문제의 의도와 풀어나가는 과정을 익혔다.. 그런데 아마도 이제 그런 문제가 더 많아질 것으로 보인다.. 아쉽기는 하지만 나 스스로 생각하는 과정 등을 더 발전해보고자 시작했기에 그런 측면에서는 만족한다..

이 문제는 다른 부분 보다는 셀프넘버에 대한 개념과 이해가 가장 중요하다고 생각 된다.. 나두 처음 문제를 접했을 때 문제를 푸는게 문제가 아니라 셀프넘버 자체를 이해를 못하고 있다보니 다른분들이 풀어둔 문제를 봐도 소스 자체가 이해가 안갔다..

정의를 찾다보니 영문으로 된 글도 있었다.. 영문이어서 번역기 돌려서 봤는데 그래도 어느정도의 개념은 문제들과 더블어 이해하다보면 납득?? 은 가더란.. ㅎㅎ



 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package step5;

//import java.util.Scanner;

public class FuncNum {

    //@SuppressWarnings("resource")
    public static void main(String[] args) {
  
        //Scanner scan = new Scanner(System.in);
        
        int valA = 0;
        int valB = 0;
        int valC = 0;
        int valD = 0;
        int valResult = 0;
  
        boolean[] generator = new boolean[10000];
        
        for(int i = 1; i < 10000; i++) {
            valA = i / 1000;
            valB = (i / 100) % 10;
            valC = (i / 10) % 10;
            valD = i % 10;
            
            //System.out.println("valA ######## > " + valA);
            //System.out.println("valB ######## > " + valB);
            //System.out.println("valC ######## > " + valC);
            //System.out.println("valD ######## > " + valD);
            //System.out.println("================================");
            
            valResult = valA + valB + valC + valD + i;
         
            if((valResult >= 1) && (valResult < 10000)) {
                generator[valResult] = true;
            }
        }
        
        for(int i = 1; i < 10000; i++) {
            if(generator[i] == false) {
                System.out.println(i);
            }
        }
    }

}//



[Book] 페르시아의 왕자 개발일지..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

페르시아의 왕자 : 개발일지 - 8점
조던 메크너
다이피아

이 책은 20대 후반이상이라면 어렸을때 대부분 해봤을 페르시아의 왕자의 개발일지로 게임을 만든 조던 메크너가 블로그에 틈틈이 올리던 당시의 일기를 묶어서 25주년을 기념해서 이북으로 발매한 책이다. 이 책을 장희재님이 작년에 클라우드 펀딩을 통해서 번역의사를 밝혔고 여기에 다수에 참여자가 모여 펀딩이 이뤄져서 이 책이 한글로도 나오게 되었다.
페르시아의 왕자는 어렸을 때 무척 재밌게 했던 게임이지만 어렸기 때문에 게임에 대해서는 잘 몰랐다. 심지어 이 게임을 만든 조던 메크너가 카라테카도 만든 지도 몰랐었다. 카라테카란 이름만 보는 순간은 무슨 게임인지 몰랐었지만 게임화면을 보는 순간 어렸을 때 마찬가지로 많이 했던 게임임을 바로 알 수 있었다. 이 개발일지는 조던 메크너가 카라테카를 만들어서 어느 정도 성공을 이룬 1985년부터 페르시아의 왕자를 기획해서 만들고 발표한 뒤 페르시아의 왕자 2를 준비하던 1993년까지의 개인 일기를 책으로 엮은 것이다.

개인 일기이기는 하지만 IT종사자라면 꽤나 재미있게 읽을 수 있으니라고 생각한다. 일기이므로 내용은 꽤 산만하고 이런저런 사적인 얘기나 고민들도 많이 나오기는 하지만 어쨌든 재밌다!! 그것도 상당히.. 그 당시에 게임을 어떻게 만들었는지 어떤식으로 진행이 되었는지를 알게 되는 것도 재미가 쏠쏠하다. 페르시아의 왕자를 만들기 위해서 동생을 달리게 하거나 점프하게 하는 걸 영상으로 찍어서 디지타이징하는데 당시에는 컴퓨터에 무지했기 때문에 이런 식으로 게임을 만든다는 것이 너무나 흥미로웠고 그 영상과 마지막 공주와 껴안는 영상이 실제 페르시아의 왕자의 화면과 너무 흡사해서(픽셀로 되어 있음에도!!!) 웃음이 나올 지경이었다. 또한 재미있는 점은 당시의 게임이나 IT 업계의 상황을 엿볼 수 있다는 점인데... 조던 메크너가 "게임 업계가 가라앉고 있다"고 하는 점이나 "젊은 프로그래머들이 치고 올라와서 연배있는 프로그래머들이 걱정한다"는 부분은 왠지 30년 가까이 지난 지금도 크게 달라지지 않은 것같아서 흥미롭다.

조던 메크너는 영화각본을 쓰는 쪽에도 관심이 많았는데 나에게는 페르시아의 왕자를 다 만들고 여러 나라를 돌아다니며 영화관련 일을 하면서 페르시아의 왕자 2 사이를 왔다갔다 하는 뒷부분 보다는 페르시아의 왕자를 한창 만드는 부분이 훨씬 재미가 있었다. 페르시아의 왕자에 나오는 새도우맨이나 적과 칼싸움을 하는 과정, 약물을 먹는 과정이 어떤 과정을 거쳐서 추가되고 만들게 되었는지가 자세히 나와있고 조던 메크너가 페르시아의 왕자를 디자인하면서 하던 고민들이 고스란히 담아 있어서 게임 개발자는 아니지만 개발자로써 무척 흥미롭게 보았다. 물론 이는 페르시아의 왕자가 어렸을때 많이 한 게임이라서 각 게임의 요소들이 기억속에 남아있기 때문일 것이다.

일기형식이라 내용이 부담스럽지도 않으니 더 많은 사람이 이 책을 읽었으면 하는 바램이다. 그리고 이 책은 이북으로만 출시되었는데(클라우드 펀딩에서 높은 금액을 펀딩한 사람들에게는 종이책도 준 걸로 알고 있는데 파는지는 모르겠다.) 이 책을 읽으려면 왠만하면 epub 3가 지원되는 책으로 읽기를 권한다. 내가 알기로는 아이튠즈다이피아에서 epub 3를 팔고 있는 걸로 알고 있다. epub 3를 추천하는 이유는(난 아이튠즈 버전만 봤다.) 책 중간에 나오는 조던 메크너의 실제 메모등의 사진을 확대해서 볼 수 있고 중간중간 나오는 동영상을 플레이해 볼 수 있기 때문이다. 페르시아의 왕자를 만들면서 찍었던 이 영상들을 함께 보는 것은 큰 즐거움으로 보이는데 리디북스등에서 파는 이북에서는 이 동영상을 볼 수 없는 것으로 보인다.(아마도..) 그리고 이는 epub 3가 아닌 알라딘등에서 파는 책도 비슷하리라고 생각한다.

어쨌든 이 자리를 빌어 이 책을 번역해서 발매해주신 장희재님께 감사를 드린다. 사실 클라우드 펀딩에 참여하고(난 클라우드 펀딩을 별로 좋아하지 않는다.) 10월에 나온 다는 책이 올 봄에나 나오게 되면서 트위터에서 좀 징징 거렸었는데(변명을 하자면 늦는걸 징징거렸다기 보다는 늦어지는 것에 대한 피드백이 잘 오지 않아서 그런거였지만...) 책을 읽고 나니 약간 죄송한 마음이다. 정말 엄청난 품질로 좋은 책이 나와버렸다.(번역 품질이 무척 좋다.) 블로그에 가보니 카라테카 개발일지도 번역하신다고 올라와 있던데 기대가 많이 된다.


[EP] FRENDS meetup에서 발표한 "초급 개발자 탈출"..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

지난 6일(토) FRENDS에서 올해는 내부 모임만 계속하다가 오랜만에 meetup을 열었다. 올해 해보기로 한 것중에 하나이기도 하고 이런 행사에 대한 경험도 쌓기 위해서 작은 규모로 진행을 했고 여기서 발표를 하나 맡게 되었다. 발표를 많이 하는 편은 아니지만 그동안은 기술세션만 발표했기 때문에 이번에는 좀 다른 얘기를 할 수 있지 않을까 해서 초심자들에게 혹 도움이 될만한 얘기를 해볼까 해서 "초급 개발자 탈출"이라는 제목을 선택했다. 준비하면서 주제선정을 잘못했나 싶을 정도로 스토리라인을 잡기 어려웠고 기술 세션이 아니다 보니 어떤 얘기를 할지 참 고민을 많이 했는데 그냥 내가 해온걸 중심으로 얘기하자는 생각으로 발표자료를 만들었고 그럭저럭 나쁘지 않았던 듯 하다.



이 발표자료는 슬라이드쉐어에도 올라가있다. 이번 meetup은 처음 기획할 때부터 프로그래밍을 많이 했고 잘하는 사람들 보다는 초심자들을 대상으로 하기로 했었다. 원래는 대학생들을 대상으로 하자는 얘기를 했었지만 대학생들과의 어떤 연결점을 가질 수 없었고 그러다보니 대학생들의 관심사를 추정하기도 어려웠기에 그냥 초심자들을 모았다. 장소는 NHN의 후원을 받았지만 큰 장소를 구할수 없어서(Toz에 의외로 큰 장소가 없더라는...) 30명까지만 신청받았다. 하지만 우리 인원수는 세지 않았기 때문에 우리는 계속 서있어야 했다. ㅠㅠ 장소가 협소하기도 하고 의도하고 있는 타게팅이 있었기 때문에 이번에는 역필터링(?)을 시도했다. 그러니까 이미 잘하는 사람은 왠만하면 받지 않으려는 의도였고 이 생각은 내가 낸 의견이었지만 막상 하고보니 그냥 아는 사람 필터링이 되어버려서 좋은 시도였는지는 애매하다. 다음번에 하게되면 고민이 좀 될듯...



아무튼 무료세미나이긴 하지만 너무 신청이 막 들어오고 당일날 안오면 주최하는 입장에서는 곤란하기 때문에 전에 KSUG에서도 한번 한적이 있었던 만원을 선입금받고 왔을 경우 돌려주는 방식을 취했다. 이는 무료세미나에서 일반적으로 발생하는 갈지 안갈지 모르지만 일단 신청해놓고 당일날 고민하는 것을 좀 막고 곰곰히 생각해보고 신청하길 바라는 의도였는데 생각외로 3일정도만에 30석이 다 찼다..(오오~~) 이렇게 신청하신 분중에 28명이나 오시는(2분은 미리 연락도 주신...) 높은 참여율에 여성개발자도 5분이나 오셨다. 이건 정말 흔치않은... 보통 여성개발자들이 가고싶어도 가면 혼자만 여자일까봐 잘 안온다는 얘기를 들었는데 5명이나 오신건 꽤 흥미로운 점이었다. 간만에 처음 시도하는 방식으로 진행한 것 치고는 큰 사건사고 없이 잘 진행된것 같다.

My Comment..
햄이 오래전에 발표한 내용들이다.. 위에 언급된 것처럼 초보 개발자 또는 개발자를 시작하려는 사람들을 대상으로 한 발표다..

하지만 내가 보기엔 나처럼 개발을 오래했거나 개발자라는 이름으로 오래 지난 사람도 참석했어도 좋았을 발표였다고 생각한다.. 비록 엄청 오래전이긴 하지만 말이지.. ㅎㅎㅎ 이유는 전체적인 내용이 개발을 어떻게 접근해야될지.. 개발을 위해서 어떻게 하는게 좋을지 등등의 개발자로써 살아가면서 취했으면 하는 행동들과 방법론 등에 대한 내용들이 많기 때문이다..

항상 발표내용처럼 할 순 없을 것이다.. 저마다 입장과 상황 차이가 있을테니 말이다.. 그렇지만 해당 내용을 보고 한 번 쯤은 고민해보고 내가 하고 있는 것들과 비교를 하면서 조금더 덧붙여볼만한 것은 덧붙여서 발전해나가는 것도 좋다고 생각한다.. 나 또한, 그렇게 해서 무엇인가를 하려고 노력하였으니 말이다.. ㅎㅎ