항해 같은 팀인 지성님이 주신 문제
|
[제한사항]
- 이미 값이 채워진 인덱스에는 또 다시 같은 값을 채우지 않는다.
[입출력 예]
[1,2,3,4,5,6,7,8,9,10,11,12, .... 44,45]
추측)
배열 개수가 정해져있고 들어가야하는 숫자 또한 1부터 45까지의 나열이기 때문에 인덱스가 0부터 시작임을 생각해 임의의 정수값에 -1을 적용해 인덱스를 잡고 값을 집어넣는다. 집어넣기 전에 해당 자리가 int배열의 디폴트 값인 0이 아니면 값은 집어 넣지 않으면 될 거 같다.
소스코드)
import java.util.*;
public class chap01 {
public static void main(String[] args) {
int[] flag_arr = new int[45];
while(true) {
int randomNum = (int) (Math.random() * 45 + 1);
if (flag_arr[randomNum - 1] != randomNum) {
flag_arr[randomNum - 1] = randomNum;
}
int cnt = 0;
for (int one : flag_arr) {
if (one == 0) {
cnt++;
}
}
if (cnt == 0) {
break;
}
}
System.out.println(Arrays.toString(flag_arr));
}
}
리뷰)
일단 생각한대로 코드 작성함에 있어서 루프문을 멈추는 부분에 대해서도 필요함을 깨달았다. 알고리즘을 막 시작해서 그런가 아직 문제를 풀면서 고려해야할 점을 많이 놓치고 있다는 생각이 든다. 만들기 전에 구체적으로 생각할 수 있는 연습이 필요하다는 생각이 들었다.
또한 무한 루프문 안에 또 for문이 너무 많이 돌아가는 게 아닌가 하는 생각이 든다. 이걸 줄일 수 있는 방법이 없을까?
flag에 관련된 거라고 하셨는데 공부하려니 키워드를 뭐로 검색해야할지 모르겠다.
보통 flag하면 boolean 값으로 토글처럼 사용하는 방식만 나오는데 ㅠ
'Coding Test > Algorithm' 카테고리의 다른 글
Programmers] 정수 내림차순으로 배치하기 (0) | 2022.11.19 |
---|---|
Programmers] 자연수 뒤집어 배열로 만들기 (0) | 2022.11.19 |
Programmers] 자릿수 더하기 (0) | 2022.11.18 |
Programmers] 나누어 떨어지는 숫자 배열 (0) | 2022.11.18 |
Programmers] 완주하지 못한 선수 (0) | 2022.11.18 |