알고리즘

자료구조와 함께 배우는 알고리즘 입문[자바] - 3일차

zumsim 2022. 11. 15. 16:00
728x90
반응형

02. 기본 자료구조

 

연습문제Q10

//시력 분포(0.0에서 0.1단위로 21개)

static final int VMAX = 21;


static class PhyscData {
     String name;
     int height;
     double vision;

     PhyscData(String name, int height, double vision) {
          this.name = name;
          this.height = height;
          this.vision = vision;
     }
}

 

static double aveHeight(PhyscData[] dat) {
      double sum = 0;

     for(int i=0; i<dat.length; i++) {
          sum += dat[i].height;
     }
    return sum/dat.length;
}

static void distVision(PhyscData[] dat, int[] dist) {
     int i=0;
     dist[i] = 0;

     for(i=0; i<dat.length; i++) {
          if(dat[i].vision >= 0.0 && dat[i].vision <= VMAX / 10.0) {
               dist[(int)(dat[i].vision*10)]++;
          }
     }
}

static String chg(int n) {
     String rst = "";
     for(int i=0; i<n; i++) {
          rst += "*";
     }
     return rst;
}

 

public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);

     PhyscData[] x = {
          new PhyscData("테스트1", 162, 0.3),
          new PhyscData("테스트2", 172, 0.1),
          new PhyscData("테스트3", 165, 0.4),
          new PhyscData("테스트4", 178, 1.3),
          new PhyscData("테스트5", 189, 1.7),
          new PhyscData("테스트6", 156, 1.7),
          new PhyscData("테스트7", 146, 0.5),
          new PhyscData("테스트8", 168, 1.0)
     };

 

     int[] vdist = new int[VMAX];

     System.out.println("리 스 트");
     System.out.println("이름       키   시력");
     System.out.println("====================");

     for(int i=0; i<x.length; i++) {

          System.out.printf("%-8s%-5s%-3s\n", x[i].name, x[i].height, x[i].vision);

     }

    System.out.println("평균키 ::: "+aveHeight(x)+" cm");

    distVision(x, vdist);
    System.out.println("\n시력 분포");

 

    for(int i=0; i<VMAX; i++) {

         System.out.printf("%3.1f~ :%s \n", i / 10.0, chg(vdist[i]));

    }

}

 

 

연습문제Q11

static int [][] mdays = {
      {31,28,31,30,31,30,31,31,30,31,30,31},
      {31,29,31,30,31,30,31,31,30,31,30,31}
};

static int isLeap(int year) {
      return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 1:0;
}

static class YMD {
      int y;
     int m;
     int d;

public YMD(int y, int m, int d) {
     this.y = y;
     this.m = m;
     this.d = d;
}

public void after(int n) {
     YMD temp = new YMD(y, m, d);
     temp.d += n;
     int flag = isLeap(y);
     int tmpMonth = mdays[flag][temp.m-1];

     if(temp.d < tmpMonth) {
          temp.m += 1;
          temp.d -= tmpMonth;
     }
     System.out.println("after :: "+temp.y+"년 "+temp.m+"월 "+temp.d+"일");
}

public void before(int n) {
      YMD temp = new YMD(y, m, d);
      temp.d -= n;
      int flag = isLeap(y);
      int tmpMonth = mdays[flag][temp.m-1];

      if(temp.d < tmpMonth) {
           temp.m -= 1;
           temp.d = temp.d+n-1;
      }
      System.out.println("before :: "+temp.y+"년 "+temp.m+"월 "+temp.d+"일");
}
}

 

public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);

 

      System.out.print("날짜 입력 ::: ");

      int num = sc.nextInt();

      YMD ymd = new YMD(2022, 11, 15);

      ymd.after(num);
      ymd.before(num);
}

728x90
반응형