'코딩'에 해당되는 글 6건

  1. 2015.05.20 (Algospot)Hamming Code
  2. 2015.01.04 Project Euler_ pro12
  3. 2014.12.29 Project Euler_ pro8
  4. 2013.05.08 [python] 기본문법
  5. 2013.04.16 [Matlab] Cow문제3
  6. 2013.03.22 [Java] 소켓프로그래밍

(Algospot)Hamming Code

코딩 2015.05.20 22:36 |

문제링크(https://algospot.com/judge/problem/read/HAMMINGCODE)

역시 무언가를 시작할 때는 튜토리얼부터 해야 제맛 ㅎㅎ

이 문제는 입력된 코드가 제대로 된 코드인가 체크하는 알고리즘으로써 정해진 bits를 xor하면 어느 bit에 문제가 있는지 알려준다.

그냥 문제 있는 그대로 코딩해서 풀면 답이 나온다 

답안으로 제출한 코드

#include<iostream>

using namespace std;
int hammingCode(){
    int chk[3][4]={{0,2,4,6},{1,2,5,6},{3,4,5,6}};
    int T;
    cin>>T;
    while(T--){
        char arr[8];
        cin>>arr;
        int sol=0;
        for(int i=0;i<3;i++){
            int flag=(int)arr[chk[i][0]];
            for(int j=1;j<4;j++){
                flag^=(int)arr[chk[i][j]];
            }
            sol+=flag<<i;
        }
        arr[sol-1]^=1;
        cout<<arr[2]<<arr[4]<<arr[5]<<arr[6]<<endl;
    }
}


신고

'코딩' 카테고리의 다른 글

(Algospot)Hamming Code  (0) 2015.05.20
Project Euler_ pro12  (0) 2015.01.04
Project Euler_ pro8  (0) 2014.12.29
[python] 기본문법  (0) 2013.05.08
[Matlab] Cow문제3  (0) 2013.04.16
[Java] 소켓프로그래밍  (0) 2013.03.22
Posted by MathGrammer

댓글을 달아 주세요

Project Euler_ pro12

코딩 2015.01.04 10:07 |

9,10번은 쉬우니 따로 쓰진 않겠고 11번은 공부를 조금 더 한 후에 풀도록 하겠다.

Highly divisible triangular number

Problem 12

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Let us list the factors of the first seven triangle numbers:

 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

12번 문제는 위와 같다. triangle number라는 숫자에 대한 설명이 나와있고 약수가 500개가 넘는 첫번째 숫자를 구하면 되는 문제이다.

이 문제의 핵심은 triangle number를 어떻게 소인수 분해를 할것인가에 달려있다.

먼저 소인수 분해를 하려면 소수를 알아야하고 약수의 갯수는 각 소인수들의 갯수+1개의 곱으로 알아낼 수 있다.

triangle number를 쭉 써내려가다보면 triangle number를 만들어가는 과정에서 소수를 얻어낼수 있다는 것을 알 수 있다.

따라서 소수 테이블을 따로 만들어내지 않고 triangle number를 만들면서 나온 소수를 따로 저장하면 내가 필요한 소수들을 얻을 수 있을 것이라 예상하였다. 이를 바탕으로 만들어진 코드는 다음과 같다.

triangle=1
prime=[2]
for addition in range(2,13000):
num=1
triangle=triangle+addition
temp=triangle
for factor in prime:
count=0
while(not temp%factor):
temp=temp/factor
count=count+1
if(count):
num=num*(count+1)
if(temp!=1):
prime.append(temp)
if(num>=500):
print "The End"
break;
print "%d - %d의 약수의 갯수는 %d개 이다" % (addition,triangle,num)
print triangle

코드를 실행시키면 76576500이란 숫자를 얻을 수 있다.

신고

'코딩' 카테고리의 다른 글

(Algospot)Hamming Code  (0) 2015.05.20
Project Euler_ pro12  (0) 2015.01.04
Project Euler_ pro8  (0) 2014.12.29
[python] 기본문법  (0) 2013.05.08
[Matlab] Cow문제3  (0) 2013.04.16
[Java] 소켓프로그래밍  (0) 2013.03.22
Posted by MathGrammer

댓글을 달아 주세요

Project Euler_ pro8

코딩 2014.12.29 19:51 |

1번부터 7번까지는 이미 풀었고 어렵다고 생각되지도 않아서 글을 따로 적지는 않겠다

The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450

Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?

8번문제는 다음과 같다. 1000개의 정수들을 나열해주고 13개의 숫자를 곱해서 가장 큰 숫자를 찾으라는 내용이다. 풀이방법은 다음과 같다.

1. 앞에서부터 13개를 차례로 곱한다.

2. 0이 등장하면 13번을 뒤로가서 그 뒤로부터 다시 1번작업을 반복한다.

풀이방법은 매우단순하므로 더 이상의 설명은 생략하겠고 코드는 다음과 같다.


digit = """ 정수들 """

prevmax=1

nowmax=1

iter=0


while(iter<=len(digit)):

prevmax=nowmax

nowmax=1

for i in range(0,13):

if(not int(digit[i])):

iter=iter+14

break;

nowmax=nowmax*int(digit[iter+i],10)

if(nowmax<prevmax):

nowmax=prevmax

iter=iter+1


이렇게하면 digit의 범위가 넘어간다고 에러가 뜨지만 이미 최대값은 prevmax에 저장되어 있는 상태다

답은 23514624000

신고

'코딩' 카테고리의 다른 글

(Algospot)Hamming Code  (0) 2015.05.20
Project Euler_ pro12  (0) 2015.01.04
Project Euler_ pro8  (0) 2014.12.29
[python] 기본문법  (0) 2013.05.08
[Matlab] Cow문제3  (0) 2013.04.16
[Java] 소켓프로그래밍  (0) 2013.03.22
Posted by MathGrammer

댓글을 달아 주세요

[python] 기본문법

코딩 2013.05.08 20:11 |

변수선언이나 배열선언방식은 같은 script언어인 Matlab과 동일하므로 따로 적진 않겠다. python에는 포인터가 없어서 접근하기 쉬운 언어이고 기본적으로 BigInterger를 제공해주므로 수학적인 언어를 계산하는데 아주 편리한 언어이다.

다른언어와 비교하여 쓰는 방법이 달라지는 부분만 간략하게 설명을 하겠다.

1. if, while, for, 함수선언(def), 클래스선언을 할때는 :을 반드시 맨 마지막에 붙여줘야한다.
2. 함수들을 호출할 때는 함수명(입력변수)로 동일하지만 if, while과 같은 조건문에는 괄호대신 if와 조건식사이에 공백을 넣어준다.
3. for문을 사용할 때 뒤에 써주는 것이 매우 다양하다.
    for i in a --> i=1부터 len(a)만큼 반복해준다.
    for i in range(a,b) --> i=a부터 b까지 반복한다.
4. print('문자열', 변수) / 이와같이 출력함수는 C에서 포맷스트링이 빠진 형태라고 생각하면 편하다.
5. 함수내부에서 선언되지 않은 변수들은 모두 전역변수 취급한다. 물론 global로 선언하면 함수내부에서도 전역변수 취급을 한다.
6. 축약함수(Lamda)라고 딱 한줄짜리 함수는 따로 선언하지 않아도 되는 기능이다.
    사용방법 : (lamda 변수리스트 : 내부식 )(입력변수)
7. 제곱이 **이다. ㅋㅋㅋㅋㅋㅋㅋ 뭐야이게!

신고

'코딩' 카테고리의 다른 글

(Algospot)Hamming Code  (0) 2015.05.20
Project Euler_ pro12  (0) 2015.01.04
Project Euler_ pro8  (0) 2014.12.29
[python] 기본문법  (0) 2013.05.08
[Matlab] Cow문제3  (0) 2013.04.16
[Java] 소켓프로그래밍  (0) 2013.03.22
Posted by MathGrammer

댓글을 달아 주세요

[Matlab] Cow문제3

코딩 2013.04.16 14:36 |

음... 왜 저번학기보다 수준이 많이 떨어지는 듯한 느낌이지 ㄱ-.. 이번학기엔 학사에서 1등할 수 있을까... 열심히 하면 될거라고 믿는다.



mat=vpa(zeros(10,500));

mat(1,1:100)=1;

for i=2:10

    for k=1:500

        if(k>100)

            mat(i,k+1)=sum(mat(i-1,k-99:k));

        else

            mat(i,k+1)=sum(mat(i-1,1:k));

        end

    end

end

Dynamic Programming으로 풀었다. 이론상으론 큰 문제를 작은 문제로 쪼개서 푼다는데 아직 이 것을 수학적으로나 멋있게 증명은 못하겠지만 딱봐도 D.P를 사용해야 할거 같지 않나? ㅋㅋ

신고

'코딩' 카테고리의 다른 글

(Algospot)Hamming Code  (0) 2015.05.20
Project Euler_ pro12  (0) 2015.01.04
Project Euler_ pro8  (0) 2014.12.29
[python] 기본문법  (0) 2013.05.08
[Matlab] Cow문제3  (0) 2013.04.16
[Java] 소켓프로그래밍  (0) 2013.03.22
Posted by MathGrammer

댓글을 달아 주세요

솔직히 여태까지 컴퓨터에 대해서 공부를 해오고는 있었지만 본격적으로 뭔갈 만들어야겠다고 마음먹고 완성시킨건 없다. 이번 블로깅을 시작하면서 제대로 코딩공부를 하자는 마음을 먹었다.

일단 내 첫 코딩작품은 소켓프로그래밍으로 해볼까한다.

C에서의 소켓도 있지만 일단 Java를 공부하고 있었기 때문에 Java에서의 소켓 프로그래밍에 대해서 얘기하겠다. 자바는 C와는 다르게 라이브러리가 엄청 많다. 물론 C가 적은 편은 아니지만 C에 비해 더 많다는 뜻이다. 소켓프로그래밍을 하기위한 과정을 한번 살펴보자.

공통부분 import java.net.*;
자바에서 소켓 프로그래밍과 관련된 라이브러리는 java.net.*에 있다. 이미 만들어져있는 것을 사용하면 되므로 먼저 가져오도록하자.

클라이언트 사이드 필수요소
1. socket=new Socket("127.0.0.1",60000);
서버의 IP와 Port를 입력하면 연결을 시도한다.
2. 연결이 종료되었을 때 finally로 시스템 자원을 해제하는 것이 좋다.

서버 사이드 필수요소
1. server=new ServerSocket(60000);
ServerSocket은 클라이언트가 서버에 접속할 수 있게 소켓을 열어주는 역할을 한다. 
2. socket=server.accpet();
서버를 열어 두고 클라이언트가 접속 할 때까지 대기한다.
3. 
ip=socket.getInetAddress().getHostAddress()
사용자의 IP를 저장해 놓는 부분이다.
4. 클라이언트와 마찬가지로 연결이 종료되었을 때 finally문을 이용하여 시스템 자원을 해제한다.

참고로 소켓 프로그래밍을 할 때는 try-catch문을 사용해주는 것이 좋다.

소켓프로그래밍의 기본만 보면 위와 같이 정말로 단순하다. 나중에 이를 이용해서 메신저나 파일주고받는 프로그램을 짜보도록 하겠다.

신고

'코딩' 카테고리의 다른 글

(Algospot)Hamming Code  (0) 2015.05.20
Project Euler_ pro12  (0) 2015.01.04
Project Euler_ pro8  (0) 2014.12.29
[python] 기본문법  (0) 2013.05.08
[Matlab] Cow문제3  (0) 2013.04.16
[Java] 소켓프로그래밍  (0) 2013.03.22
Posted by MathGrammer

댓글을 달아 주세요

티스토리 툴바