달력

4

« 2024/4 »

  • 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
2007. 9. 12. 10:57

[JavaQuiz] 3n+1 그거/Java2007. 9. 12. 10:57

/**
 *
 * @(#) ThreeNPlusOne.java
 * created date : 2007. 09. 04
 *
 * (c) Copyright by Youbok, Choi.,
 * All rights reserved.

 */
package ybchoi.quiz;

import java.util.ArrayList;

/**
 * 자연수 n을 하나 받아서 짝수면 2로 나누고 홀수면 3*n+1을 합니다.
 * 이 과정을 n이 1이 될때까지 반복하고 그 과정을 리스트로 돌려줍니다.
 *
 * @author Youbok, Choi
 * @version 1.0
 *
 */
public class ThreeNPlusOne {
 
 public void doIt(String arg) {
  int number = 0;

  try {
   number = Integer.parseInt(arg);
  } catch(NumberFormatException e) {
   number = 100;
  }
 
  ArrayList result = getList(number);
  for(int i = 0 ; i < result.size(); i ++ ) {
   if( i != 0 ) System.out.print(", ");
   System.out.print(result.get(i));
  }
 }
 
 private boolean isOdd(int number) {
  return number % 2 == 1;
 }
 
 private ArrayList getList(int number) {
  ArrayList tmp = new ArrayList();
  tmp.add(new Integer(number));
 
  do {
      // 홀수인지 짝수인지 체크
      number = isOdd(number) ? (number * 3 + 1) : (number / 2) ;
     
//      System.out.println(number);
//      try { Thread.sleep(1000); } catch(Exception ignr) {}
      tmp.add(new Integer(number));
  } while( number != 1 );
 
  return tmp;
 }
 
 public static void main(String[] args) {
  ThreeNPlusOne tnpo = new ThreeNPlusOne();
  tnpo.doIt("44");
 }
}

:
Posted by 뽀기
2007. 9. 12. 10:56

[JavaQuiz] 셰익스피어-원숭이 문제 그거/Java2007. 9. 12. 10:56

/**
 *
 * @(#) Monkey.java
 * created date : 2007. 08. 31
 *
 * (c) Copyright by Youbok, Choi.,
 * All rights reserved.

 */
package ybchoi.quiz;

import java.util.Random;

/**
 *
 * @author Youbok, Choi
 * @version 1.0
 *
 */
public class Monkey {

 char[] msg;
 String mem;

 Random random;
 int length;

 Monkey(String arg) {
  msg = arg.toUpperCase().toCharArray();
  length = msg.length;
  random = new Random(System.currentTimeMillis());
 
  // 비교할 문자열 초기화
  for(int i = 0 ; i < length ; i++ ) {
   mem += " ";
  }
 }

 /**
  * A ~ Z 까지중에 무작위 생성
  *
  * @return A ~ Z 까지의 문자중 하나
  */
 private char getRandomAlpha() {
  int result = 0;

  do {
   result = random.nextInt(90);
  } while( result < 65) ;

  return (char)result;
 }

 /**
  *
  * @param _Min
  * @param _Max
  * @return
  */
// private char getRandomAlpha(int _Min, int _Max) {
//  return (char) (Math.random() * ( _Max - _Min ) + _Min);
// }
 
 /**
  * 입력받은 문자열의 길이와 같은 무작위 문자열 생성
  * 문자열 중에 입력받은 문자열과 같은 문자는 그냥 두고 나머지만 무작위로 생성
  *
  * @return 문자열
  */
 private String makeRandomString() {
  StringBuffer sb = new StringBuffer();

  for(int i = length, j = 0 ; i > 0 ; i--, j++) {

   if( mem.charAt(j) == msg[j] ) {
    sb.append(msg[j]);
   } else {
    sb.append(getRandomAlpha());
   }  
  }
 
  return sb.toString();
 }

 /**
  *
  */
 public void doIt() {
  int i = 1;

  do {
   mem = makeRandomString();
   
   try { Thread.sleep(200); } catch(Exception e) {}
   
   System.out.println(i++ + " : " + mem + " # " + String.valueOf(msg));
  }while( !String.valueOf(msg).equals(mem) );
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  Monkey m = new Monkey("ABCDEF");
  m.doIt();
 }

}

# 문자열을 입력 받고, 해당 문자열과 같은 길이의 무작위 문자열을 생성하고
# 생성된 문자열에서 입력 받았던 문자열과 같은 위치의 같은 문자가 있으면
# 해당 문자는 그냥 두고 다른 문자만 무작위로 생성하여
# 처음에 입력 받았던 문자열이 나올때까지 수행한다.

'그거 > Java' 카테고리의 다른 글

WebLogic 8.1 SP6 Download URL  (0) 2007.09.17
[JavaQuiz] 3n+1  (0) 2007.09.12
[Java Quiz] 주민등록 번호와 바코드 유효성 체크  (0) 2007.09.12
Java Anti-Pattern  (2) 2007.08.20
JDK 5.0의 새로운 기능 Annotation  (0) 2007.08.14
:
Posted by 뽀기

/**
 *
 * @(#) JuminNoBarCode.java
 * created date : 2007. 09. 03
 *
 * (c) Copyright by Youbok, Choi.
 * All rights reserved.
 */
package ybchoi.quiz;

/**
 * 체크섬 계산을 통해 주어진 주민번호나 바코드가 옳은지 확인한다.
 *
 * == 주민번호 ==
 * 주민번호는 총 13자리인데, 앞의 12자리를 떼내어서 첫 숫자부터 각각 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5를 곱한다.
 * 그 수들을 모두 합한다음, 11로 나누어 그 나머지를 다시 11에서 뺀 수가 마지막 자릿수(13번째)와 일치하면 주민등록번호가 정상이라 본다.
 * 하지만 마지막 수식 결과가 10이면 0을 취하고 11이면 1을 취한다.
 *
 * == 바코드 ==
 * 바코드는 전체 13자리인데 처음 세 개 숫자는 국가로 880은 한국을 가리킨다.
 * 다음 네개가 제조업자이고 다음 다섯개는 어떤 상품인지를 말한다.
 * 마지막 하나의 숫자가 체크섬이 된다.
 * 앞 부분의 12자리 중 홀수자리는 그대로 더하고, 짝수자리는 더한 후 곱하기 3.
 * 이 두 값의 함에 체크 숫자를 더하면 10으로 나누어 떨어져야 한다.
 *
 * @author Youbok, Choi
 * @version 1.0
 *
 */
public class JuminNoBarCode {
 final int[] JUMIN_CHECK = new int[]{2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5};
 String strNo;
 /**
  *
  */
 public JuminNoBarCode(String arg) {
  this.strNo = arg;
 }
 
 public void check() {
  System.out.println("# " + checkJuminNo());
  System.out.println("# " + checkBarCode());
 }
 
 private boolean checkJuminNo() {
  int totalsum = 0;
  int checksum = 0;
  int idx = 0;
 
  // 마지막자리(13번째)를 제외한 각 숫자에 값을 곱하여 전부 더한다.
  for(idx = 0 ; idx < JUMIN_CHECK.length ; idx++ ) {
   totalsum += (((int)strNo.charAt(idx)-48) * JUMIN_CHECK[idx]);
   
//   System.out.println("# totalSum = " + totalsum + " =======> " + ((int)strNo.charAt(i)-48));
  }
 
  // 모두 합한 수를 11로 나누어 그 나머지를 다시 11에서 뺀 수가 체크섬
  checksum = 11 - (totalsum % 11) ;
 
  System.out.println("# checksum = " + checksum + " : " + strNo.charAt(idx) );
 
  // 체크섬이 10이면 0, 11이면 1
  if( checksum == 10 ) checksum = 0;
  else if( checksum == 11 ) checksum = 1;
 
  // 주민번호 마지막자리와 체크섬 비교
  if( (int)strNo.charAt(12) == checksum ) {
   return true;
  } else {
   return false;
  }
 }
 
 private boolean checkBarCode() {

  int totalsum = 0;
  int idx = 0;
 
  // 마지막자리(13번째)를 제외한 각 숫자에서, 홀수자리는 그대로 더하고, 짝수자리는 곱하기 3을 해서 더한다.
  for(idx = 0 ; idx < strNo.length() - 1 ; idx++ ) {
   if( idx % 2 == 1 ) {
    totalsum += ( ((int)strNo.charAt(idx) - 48) * 3);
   } else {
    totalsum += ( (int)strNo.charAt(idx) - 48 );
   }
//   System.out.println("# totalSum = " + totalsum + " =======> " + ((int)strNo.charAt(idx)-48));
  }
 
  // 마지막 체크섬을 더한다.
  totalsum += (int)strNo.charAt(idx) - 48;
 
  System.out.println("# totalsum = " + totalsum + " : " + strNo.charAt(idx) );
 
  // 최종값이 10으로 나누어 떨어지면 정상
  if( totalsum % 10 == 0 ) {
   return true;
  } else {
   return false;
  }
 }
 
 public static void main(String[] args) {
//  JuminNoBarCode jnbc = new JuminNoBarCode("7807021457211");
  JuminNoBarCode jnbc = new JuminNoBarCode("8809010665009");
  jnbc.check();
 }
}

# 흠. 주민번호와 바코드에 이런 심오한 뜻이 있는 줄 몰랐다.

'그거 > Java' 카테고리의 다른 글

[JavaQuiz] 3n+1  (0) 2007.09.12
[JavaQuiz] 셰익스피어-원숭이 문제  (0) 2007.09.12
Java Anti-Pattern  (2) 2007.08.20
JDK 5.0의 새로운 기능 Annotation  (0) 2007.08.14
JDK 5.0의 새로운 기능 Generics  (1) 2007.08.13
:
Posted by 뽀기