JAVA를 이용한 For문 활용(다이아몬드, 하트 만들기)

프로그래밍 2006.04.05 02:29
  얼마전  JAVA매냐(?) 친구 한명이 메신저를 통해 재미있는 문제를 내 주었습니다.

  For문을 이용해 '*'로 다이아몬드, 하트를 출력하는 문제 였는데요. For문을 자유자재로 사용 할 수 있게 되면 아무래도 프로그래밍에 많이 유리해 지기 때문에 한번 권해 보더라구요^^
그 친구는 얼마전에 이미 만들어 봤는데 재미 있었다는 이야기와 함께..

  For문은 반복문과 조건문 게다가 변화값까지 한번에 셋팅할 수 있는 만능 명령어이기 때문에 자유자재로 구사 할 수 있게 되면, 그야말로 For문 한종류만 써서도 프로그램을 짤 수 있으니까요. For문으로 If문까지 처리를 할 수 있으니..


  제 블로그를 통해 제가 친구에게 받았던 문제를 한번 내 보겠습니다^^
관심 있으신 분들은 재미로라도 한번 풀어보세요.

제가 만든 출력 화면은 참고를 위해 띄우고, 소스는 폴딩 처리를 해 놓겠습니다.
처음부터 소스를 보진 마시고, 한번 만들어 보신 다음에 소스를 비교해 보아요^^

  첫번째 문제입니다.
'*'을 이용해 다이아몬드를 출력 하시오.

<다이아몬드 출력>



  두번째 문제입니다.
'*'을 이용해 하트를 출력 하시오.(다이아몬드 출력 응용편)

<하트 출력>



  우리 모두 재미있는 자바 문제를 풀어 BOA요~^^
혹시 다른 재미있는 방법으로 문제를 풀으신 분들은 댓글을 달아 주시와요~^^

top
     TAG ,
  1. Favicon of http://raonsky.com/tt/ 라온수카이 2006.04.05 05:08 수정/삭제 댓글

    마치 나치가 개발했다는 UFO로 나메크성인의 편지를 읽는 것같은 느낌이드네요.
    뭐 싸인펜님에게 아동의 사고영역의 제한성으로 인한 수학학습장애에 맞는 교수방법을 설명해드리면 지금 제가 느끼는 거랑 똑같은 느낌을 받으시겠죠? ㅎ

    • Favicon of http://signpen.net 싸인펜 2006.04.05 15:02 수정/삭제

      하하^^ 나메크성인의 편지였군요ㅋ
      전공이 컴퓨터이다 보니까 수업을 듣거나 재미있는 무언가를 발견하게 되면 가끔 글을 써 볼려고 새로운 카테고리를 만들어 봤습니다.

      아동의 사고영...............;;;??!!??!!.....
      네..;; 같은 느낌이겠군요^^ㅋ

  2. 태양의슬픔 2006.04.05 19:32 수정/삭제 댓글

    소스를 다시 코딩해야 할듯... 크기조절이 안되는구나 예를 들어 DiamondSize를 10으로 줄때와 15로 줄때등 다이아몬드사이즈 수치만을 바꾸어 자동으로 크게만들어지고 작게만들어지고....

    • Favicon of http://signpen.net 싸인펜 2006.04.06 00:50 수정/삭제

      그거 가능하긴 한데, 다이아몬드를 좀 크게 만드느라 수치 손보는게 좀 복잡해져 버려서말야..

      내일 그부분 내가 수정해볼게..ㅇㅋㅇㅋ

    • Favicon of http://signpen.net 싸인펜 2006.04.06 13:26 수정/삭제

      class diamond
      {
      public static void main(String[] args)
      {
      int i; //변수 i 지정
      int s = 20, h = 6;
      /*다이아몬드 반쪽의 높이 = s/2, 가로 폭 = s*2, 다이아몬드 머리의 높이 = s-2h-1*/
      for(i = h*2; i < s; i+=2){ //기존의 수치들 대신 각각 h와 s 대입
      pprn(s - i); //처음의 20대신 s로 대입
      pprns(i*2);
      System.out.println();
      }
      for(i = s; i >= 0; i-=2){
      pprn(s - i); //처음의 20대신 s로 대입
      pprns(i*2);
      System.out.println();
      }
      /* 다이아몬드 크기 수정을 수월하게 하기 위해서 크기와 관련한 수치들을 변수로 지정하였음.
      s수치의 2배는 가로로 찍히는 별의 갯수이며 더불어 다이아몬드 하단 부분의 높이의 1/2
      h는 다이아몬드의 상단 높이와 관련 되어 있음.
      상단 높이의 크기는 s-2h-1의 값을 가짐. s>h*2의 값을 항상 만족하여야 함. */


      소스 상단부분만 살짝 변형시키면 크기 조정이 가능해져서 수정된 부분만 새로 주석을 붙여서 적어볼게..
      약간 넙데데한 다이아몬드를 만들려다 보니깐 수정하기가 이렇게 까다로워지네..;;;

  3. Favicon of http://www.myhyuny.net/ 화현 2006.04.07 23:18 수정/삭제 댓글

    에, 그다지 잘 짰다고 자신할 수 없지만 제가 ◆만들때 쓰던걸 자바로 옮기고 고쳐봤습니다. 그냥 이런게 있구나 하는정도로만 봐주세요 ㅠ.ㅠ

    import java.math.BigDecimal; // abs()를 쓰기위해 math패키지를 임포트 시킴

    public class dia
    {
    void showChar(int scope, char chr) // 수행 범위, 표현할 문자 입력 받고 출력하는 메소드
    {
    for (int i=0; i < scope; i++)
    System.out.print(chr);
    }

    void showDia(int size)
    {
    size=size/2+1;
    for (int i = -(size>>1)+1; i < size; i++)
    {
    showChar(Math.abs(i)<<1, ' '); // 공백 출력
    showChar(((size-Math.abs(i))<<2)-3, '*'); // 애스테리스크 출력
    System.out.println(); // 개행
    }
    }

    public static void main(String[] args)
    {
    dia d = new dia(); // 오브젝트 생성
    d.showDia(20); // 메소드 실행
    }
    }

    구조적 프로그래밍을 배우다 최근 자바를 배우면서 객체지향이라는걸 접했는데 "객체지향"적인 느낌이 무엇인지 아직 감을 못잡았습니다 ㅠ.ㅠ 지금 거의 구조적인데 그냥 무시하시고 봐주세요 ^^;

    • Favicon of http://signpen.net 싸인펜 2006.04.08 02:20 수정/삭제

      헉,,,, 훌륭하십니다.
      제가 손대지 못한 사이즈 변경 부분이 화현님의 코드에선 너무 깔끔하게 구현 되어 있군요...;;
      그 외의 부분들도 너무나 깔끔하구요.
      화현님의 코드가 너무 아름다워 보입니다^ㅡ^

댓글 쓰기