ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 220305_JAVA_문제 풀어보기
    1. JAVA/1.3 문제 2022. 3. 5. 19:30

    'A' - 'J' 까지의 문자를 랜덤하게 100 만들고
    각문자의 출현횟수를 기억할 배열을 만들어서
    회수만큼 '*' 로 출력해주는 프로그램을 작성하세요.

    예 ]

    A [5] : *****
    B [20] : *******************

    ..
    J [7] : *******

     

    처음에 이 문제를 풀때 'A' - 'J'까지 100개의 랜덤한 배열이라는 말에만 초점을 맞추어서 100개의 배열을 형성해준 후 오름차순 정렬하여 해당 숫자만큼 count 변수를 생성하여 만들려고 하였다... 계속 삽질하다가 결국 문제 못품..ㅋㅋㅋ

    답을 확인해보니 'A' to 'J' 까지 넣어줄 10개의 배열을 만든다 -> 'A' to 'J' 까지 100개가 나오도록  반복문으로 만들어서 문제를 푸는것이었다.. 바보..ㅋㅋ

     

    두가지 방법으로 풀어보기로 하였다.

     

    1. 일반 배열로 풀어보기

          1.1 A to J까지 넣어줄 배열 만들기

                int [] array = new int[10];

           1.2 A to J 사이의 100개의 랜덤한 문자 생성

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

                char ch = (char)(Math.random()*('J'-'A'+1)+'A';

               1.2.1  Math.random()*(범위)+시작점;

                        ex1) 1부터 10까지라고 한다면 (int)(Math.random()*(10-1+1)+1)으로 해주면 된다.

                        ex2)  3부터 10까지라고 한다면 (int)(Math.random()*(10-3+1)+3)으로 해주면 된다.

               1.2.2 인덱스값 생성

                       int index = (ch-'A);

                        ex) 1.2 에서 랜덤하게 형성된 문자가 C였다고 하면, C에 대한 값이 ch의 변수에 입력이 될것이고

                             맨 첫번째로 시작되는것이 'A'이므로 'A'를 빼주게 되면 C의 인덱스 값은 2가 된다.

               1.2.3 배열에 넣어주기

                array[index] +=1;
                 ex1 ) 1.2에서 랜덤하게 형성된 첫번째 문자가 'A' 라고 한다면

                        index의 값은 'A' : 'A'-'A' = 0

                        array 배열에 구체적인 값을 넣어주지 않아 0으로 초기화 되어있는 상황이므로

                        array[0] = array[0]+1 이 되어 array[0] = 1 이 되고 

                        두번째 문자가  'B'라고 한다면

                        index의 값은 'B' : 'B'-'A' = 1

                        array[1] = array[1]+1 이 되어 array[1] = 1 이 된다.

                        세번째 문자가 'A'일때,

                        이때도 똑같이 array[0] = 1이었는데 array[0] = array[0] (<- 1) + 1로 1을 누적시켜준다..

                        해당 작업을 100번 반복하면 문자의 갯수가 해당 인덱스에 누적해서 더해질 것이다.

           1.3 출력

              String str = "";

               1.3.1 별을 출력된 갯수만큼 누적해서 담아줄 String 변수 

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

                char ch = 'A'+i;

               1.3.1 array[]는 A에서 J까지의 랜덤하게 형성된 문자 갯수이다. 그러므로 A부터 J까지의 문자를 출력하기

                     위하여  for문 안에 char 타입의 지역변수 ch를 만들었다.

                    System.out.print( ch+"  [+array[i]+"] : ");

                1.3.2 별 만들어지기 전까지 출력문 작성

                    int starNum = array[i];

                1.3.3 별의 갯수를 출력하기 위하여 중첩으로 for문을 작성해줘야 하는데 범위는 array[i]까지 이다.

                      굳이 변수 생성 안해도 될거같긴한데.. 그냥 넣어줬다.. 

                   for(int j = 0; i<starNum;j++){ str += "*";}

                  (사실 해당 작업은 굳이.. 안해도 될거같고.. 그냥 System.out.print("*")만 해줘도 결과는 동일하게 나온다..  

     

                 1.3.4 "*"은 array[i](랜덤하게 생성된 알파벳 갯수)만큼 누적되어서 계속 추가된다.             

                       System.out.print(str);

                       str = "";

                 1.3.5 해당 작업을 해주지 않으면 array[i]가 계속 누적되서 별이 출력되므로 꼭 넣어줘야한다.

                       System.out.println(); 

                }

     

                    

                

     

     

    2. 2차원 배열로 풀어보기

       int[][] array = new int['J'-'A'+1][2];(=new int [10][2]라고 해도 된다..ㅋㅋㅋ)

       array[][0] ==> 문자를 넣을 공간

       array[][1] ==> 랜덤하게 100개의 문자를 생성시켜 주었을때 문자 갯수

        2.1 첫번째 칸에 문자 삽입하는 행위

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

        array[i][0] = (char)(i+'A'); 배열이 int 배열이므로 char 타입으로 강제 형변환.

        ==> array[0][0]~array[9][0] A부터~J까지 넣어주는 행위

               예를 들어 array[0][0] = 'A'+0 이기 때문에 'A'가 들어가게 된다.

                            array[1][0] = 'A'+1 이기 때문에 'B'가 들어가게 된다.

       }

     

        2.2 두번째 칸에 랜덤하게 100개의 A to J가 들어가는 문자를 카운트하는 행위.

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

        char ch = (char)(Math.random()*('J'-'A'+1)+'A);

                2.2.1 A~J 까지 랜덤하게 문자 생성

         int index = ch-'A';

                2.2.2)  A to J 까지 인덱스열 생성

                        예를 들어 랜덤하게 뽑은 첫번째 문자 ch가 A이면 인덱스는 0이다.

                        그러므로 가장 첫번째 숫자인 A에 A를 빼주면 0이 된다.

                        B 이면 index는 'B'-'A' : 1이 된다. 

         array[index][1] +=1;

                2.2.3)  위에서 언급했듯이 array[][1]은 랜덤하게 생성된 문자열의 갯수를 넣을 예정이므로

                         2.2.2)에서 생성한 index를 배열 인덱스에 넣어주었다.

                         이렇게 되면 만약 첫번째 'A'를 뽑고 그 다음번에도 'A'를 뽑으면 array[0][1]에 1씩 더해지게 된다.

     

        2.3 출력

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

         System.out.print((char)array[i][0]+"["+array[i][1]+"] : ")

                2.3.1) array[i][0] : 'A'~'J'에 대한 문자가 출력

                        array[i][1] : 'A'~'J'가 랜덤하게 출력된 횟수

             for(int j = 0; j<array[i][1].length;j++){

                2.3.2) array[i].length : 'A'~'J'가 랜덤하게 출력된 횟수만큼 범위 설정하여 "*"가 출력되도록 하기위함 

            System.out.print("*");

          }

       System.out.println();

     

     

    콘솔화면

     

     

         

     

     

     

       

       

      

     

Designed by Tistory.