● 배열을 응용한 " * " 출력 예제
int[] Arr = { 1,4,4,3,1,4,4,2,1,3,2 };
Q : 주어진 배열에 중복하는 숫자의 개수만큼 각각 * 를 출력하는 코드를 작성하라
Result ↓
3***
2**
2**
4****
1) 배열을 선언하자
int[] Arr = { 1,4,4,3,1,4,4,2,1,3,2 };
그리고 * 를 찍어줄 "횟수"를 담아줄 배열을 만든다.
int[] Arr2 = new int[4]; // 4개의 숫자의 중복횟수를 넣을꺼니 인덱스는4개
2) 무엇을 구해야 하는가 이것을 어떻게 프로그래밍으로 구현할것인가
우선 우리는 Arr에서의 중복되는 숫자의 횟수를 구해야한다. 그리고 그값을 Arr2에 넣을것이다.
Arr2[0] = 중복횟수 (+1+1+1)
Arr2[1] = 중복횟수 (+1+1)
Arr2[2] = 중복횟수 (+1+1)
Arr2[3] = 중복횟수 (+1+1+1+1)
위의길고 이쁘지않은 코드를 for문을 이용하여 바꿔보자면 다음과 같다
for(int i=0; i<Arr.length; i++) //Arr2배열에 값을 넣어주는 for문
Arr2[Arr[ i ]-1] ++;
---
' Arr[ i ] -1 ' 로 인덱스를 표현하여 코드를 깔끔하게 구현하였다.
3) Arr2[] 배열에 넣어준 값을 어떻게 이용하여 우리의 목표인 ' * ' 를 출력할것인가?
우리가 구한것은 반복횟수이다. 따라서 Arr2[i]는 반복횟수로 for문의 조건식에 사용하자 무엇이 어떻게 반복되어야 하는지 변수를 잘 생각해서 for문은 몇개 필요한지 잘 생각해 보아야 한다.
출력코드
for(int i=0; i<Arr2.length; i++)
System.out.print(Arr2[i]);
for(int j=0; j<Arr2[i]; j++)
System.out.print(" * ");
System.out.println();
---
1,2,3,4 각각의 중복횟수를 찍어야 하므로 총 실행횟수는 4번이다. 총실행횟수 변수: i < Arr2.length
각 i 의 실행에서 " * " 를 중복횟수 만큼 찍어야하므로 j < Arr2[i] (위 코드에서 구해서 저장한 반복횟수값)
Answer
public class ArrayPractice {
public static void main(String[] args) {
int[] answer = { 1, 4, 4, 3, 1, 4, 4, 2, 1, 3, 2 };
int[] counter = new int[4];
for (int i = 0; i < answer.length; i++) {
counter[answer[i]-1]++;
}
for (int i = 0; i < counter.length; i++) {
System.out.print(counter[i]);
for(int j=0;j<counter[i];j++)
System.out.print("*");
System.out.println();
}
} // end of main
} // end of class
'Java > Daily-Java' 카테고리의 다른 글
[Array] 2차원 배열의 90도 회전 (0) | 2021.04.20 |
---|---|
[Array] 동전 거슬러주기 _ Part 2 (응용) (0) | 2021.04.15 |
[Array] 동전 거슬러주기 _ Part 1 (0) | 2021.04.15 |
[Array] 2차원 배열 응용 (0) | 2021.04.13 |
[Array] 행렬의 곱셈 (0) | 2021.04.11 |