-
(국비교육) 8 - 알고리즘 + 제어문 + do while + 숫자 랜덤뽑기 + 로또개발/국비교육 2023. 6. 12. 17:51
■ 알고리즘
* 알고리즘
- 수학과 컴퓨터 과학, 언어학 또는 엮인 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차
- 문제 풀이에 필요한 계산 절차 또는 처리 과정의 순서.
- 산법, 셈법, 계산절차.■ 반복문 제어 (break, continue)
* break
break 를 쓰면 for 과 i++ 영향을 받는다.
break 는 가장 가까운 반복문을 탈출합니다.
따라서 해당 반복문을 실행하면 1만 출력된다.
출력문이 if 밖에 들어가 있는 경우 1 2 3 4 까지는 돌지만,
5 는 같기 때문에 break 가 걸려 출력되지 않는다.
Unreachable code 발생
왜냐하면 break 뒤에 출력문이 있기 때문에 절대 실행되지 않는 코드이기 때문이다.
따라서 break, continue 뒤에는 코드가 올 수 없다.
* continue
continue 는 이하 실행문을 무시하고 다시 반복한다.
i == 5 일때 continue 가 있기 때문에 5일때 출력문이 실행되지 않는다.
해당 출력문에서는 1부터 10까지 모두 출력된다.
왜냐하면 출력문이 if 조건보다 먼저 있기 때문에 일단 출력되기 때문이다.
따라서 해당 실습에서는 if 조건 아래 실행문 continue아래 문장입니다. 는 5일때 출력되지 않는다.
■ 구구단 2단 출력 (break 사용)
break 를 사용하여 2 * i 가 10보다 작을 경우를 출력하기 위해서는
i * 2 > = 10 으로 조건으로 걸어주면 멈추게 설정하면 된다.
여기서 i * 2 > 10 을 하면 2 * 5 = 10 까지 출력되는데,
이는 i 가 5일때 10보다 큰 것은 아니기 때문에 거짓으로 break 에 걸리지 않기 때문에 출력된다.
■ label
- label : break 나 continue 가 실행할 반복문의 위치를 이름으로 지정
break 는 원래 가장 가까운 반복문을 탈출하나, label 을 지정하여 break A; 지정하게 되면
A 반복문을 탈출하여 00 ~ 05 까지 출력된다.
* 실습해보기
10의 자리 j 와 1의 자리 j2 의 값이 11일때 break 를 걸어주니까
11부터 1의 자리 숫자는 출력되지 않는다.
10의 자리 j 가 3일 경우 출력하지 않고 반복임으로
29에서 40으로 넘어간다.
100의 자리 i 가 2일 경우 A라벨로 가서 반복함을
199에서 300까지로 200대 숫자들이 출력되지 않는다.
* for문 ()안에 숫자없이 10번 반복하기
숫자를 사용하지 않고 10번 반복하는 방법은 아스키코드를 이용하면 된다.
A 65 부터 시작하여 K 75 보다 작다 라는 조건을 지정해주면 10번 반복하고 종료할 수 있다.
■ 무한 반복문 (while, do~while)
* while
while 반복문 형태는 다음과 같다.
while (조건식) {
조건식이 참일 때 실행;}
따라서 계속해서 무한 반복됨을 알 수 있다.
즉, 조건식이 참이라면 무한 반복합니다.
while 은 보통 무한 반복을 실행하다가 특정 조건이 되면 탈출하도록 하고 많이 사용된다.
채팅이나 게임 등 무한 반복이 필요한 로직에서 활용된다.아래와 같이 하면 "참입니다." 가 계속 반복한다.
여기서 증감 조건식을 걸어주면 횟수 제한이 걸린다.
* 게임 시작 종료 여부 설정
- char input = System.in.read(); : 자바 속으로 들어오는 것을 읽어 들일게요.
- char 형태로 바꿔주고 던지기 실행 (추후 배움)
Y나 y를 입력받으면 게임을 종료하게끔 설정하고,
이후 quit 의 부정을 통해 반복문을 종료한다.
그러나 in.read() 를 사용하면 아래와 같이 반복돼서 출력되는 것을 볼 수 있다.
이는 in.read() 의 특이성 때문인데 in.read() 는 \n\r 도 처리한다.
\n 은 줄바꿈 처리를 해주고, \r 은 왼쪽으로 출력되게 만든다.
따라서 중복돼서 출력되지 않기 위해서는
System.in.read(); System.in.read(); 두 번 쳐준다.
※ System.in.skip()
read는 한 문자만을 입력받으므로, 버퍼로 인해서 예상치 못한 경우가 발생할 수 있다.
연속해서 두번, 또는 그 이상의 문자를 입력받는 경우에는
반드시 skip 함수를 써서 버퍼에 쌓인 개행 문자를 버리도록 한다.
https://fallingstar.tistory.com/23
* 변수 사용 여부
해당 while 문은 조건식에 b 변수를 통해 실행했기 때문에 Unreachable code 발생하지 않는다.
그러나 조건식에 false 또는 거짓에 해당하는 값을 사용하게 되면,
10번째 코드는 Unreachable code 발생한다.
■ 성적 입력하기 (for / while / 배열)
0 ~ 100 점 사이의 값을 while 값으로 설정해야 한다.
즉, 이외의 값이 나오면 다시 값을 입력해달라고 요청해야 한다.
이를 while 조건에서 100 초과 0 미만일 경우 둘 중 하나라도 나오면
다시 입력하게끔 출력문을 설정하고 사용자에게 입력을 받는다.
완료 되었다면 score 배열에 점수를 입력해주고,
배열 전체를 출력하는 Arrays.toString() 을 통해 배열값을 출력할 수 있다.
* while 결과값
++num 을 통해 증감 후 반복 횟수 출력 가능하다.
■ do~while
- while -> 조건식 검사 후 명령문장 실행
- do~while -> 명령문장 실행 후 조건식을 검사int num = 1;
do {
//명령문장;System.out.println("실행합니다.");
} while (조건식);do while 반복문은 거짓이어도 명령문장을 무조건 한 번은 실행합니다.
■ 정렬하기
* for문 이용
a[ j ] 값이 a[ j+1 ] 보다 크다면 a [ j ] 를 임의의 변수 temp 에 저장해주고, a[ j ] 는 a [ j+1 ] 로 바꿔준다.
a[ j+1 ] 의 값은 아까 저장했던 temp 로 불러와 작은 순서대로 저장될 수 있도록 설정해준다.
https://chobopark.tistory.com/196
* while문 이용
하나라도 참일 경우 for 문을 돌도록 설정해야 함으로
a[0] 부터 a 배열의 전 값이 그 다음 값보다 클 경우 for 문을 실행하게끔 설정해준다.
해당 예시는 50이 중간에 있어 for while 문을 2번 돌기 때문에
"실행합니다." 가 2번 찍힌다.
■ 지난 주 3 x 3 배열 1~9까지 숫자 랜덤하게 입력하기
r1 과 r2 를 각각 인덱스 값으로 설정해준다.
따라서 r1과 r2 는 0 부터 2까지 나올 수 있게
(int) (Math.random() * 3); 로 설정해주면 된다.
기존에 값을 저장한 적이 없다면
sam[r1][r2] == 0 으로 초기값이므로 i 값을 저장해준다.
만약 그렇지 않다면, 이전에 처리된 적이 있어 값이 있으므로
중복 발생으로 다시 돌아가기 위해서 i 값을 감소시켜 다시 돌 수 있게 한다.
모든 작업이 끝나면 배열을 출력하면 중복 없이 1 ~ 9 까지 3 x 3 배열을 구할 수 있다.
■ 중복 없이 로또 번호 뽑기
Set 은 중복을 허용하지 않는다.
size() 는 길이
.add 계속해서 저장해라
* 빈칸에 들어갈 말 작성하기
1) 2020년 4회차 5번
2) 2020년 4회차 6번
'개발 > 국비교육' 카테고리의 다른 글
(국비교육) 10 - 가위바위보 승률 + spilt + 객체지향 + 클래스 생성 + 메소드 + .sort (0) 2023.06.14 (국비교육) 9 - 패턴 + 아스키 코드 시계 + switch + 동적 가변 배열 + 배열복사 (2) 2023.06.13 (국비교육) 7 - 랜덤 + 2차원 배열 + 로또뽑기 + N자 그리기 + 중복값 제거 (0) 2023.06.09 (국비교육) 6 - 구구단 출력하기 + %활용문 + 배열 (0) 2023.06.08 (국비교육) 5 - 메소드 호출 + if, for 문 + 별찍기 + 10진법 2진법 나타내기 (0) 2023.06.07