- C0304반복문입력
- C0304개념01무한반복과입력
package C0304반복문입력;
import java.util.Scanner;
/*
# 반복문 종료
1. 무한 반복을 하면서 숫자를 입력받는다.
2. 입력한 숫자가 -100이면, 프로그램은 종료된다.
예)
숫자입력(EXIT:-100) : 1
숫자입력(EXIT:-100) : 3
숫자입력(EXIT:-100) : 4
숫자입력(EXIT:-100) : -100
프로그램 종료
*/
public class C0304개념01무한반복과입력 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean run = true;
while(run) {
System.out.print("숫자입력[EXIT:-100] : ");
int num = scan.nextInt();
//입력을 반복문 안에서 받기
if(num == -100) {
System.out.println("프로그램 종료");
run = false;
}else {
System.out.println(num);
}
}
}
}
- 코딩은 2가지를 조심해야 한다.
- 사용법
- 사용법에 매몰되면 . 사용법 만능주의가 생긴다. 실력이 안는다. 끝까지 못 살아남는다.
- 사용법은 내가 좋으면. 남도 좋다. 그리고 나는 나이를 먹는다. 내가 쉬우면 남도 쉽다.
- 논리훈련
- 논리훈련만 하면 안되는게. 실무를 못한다.
- 2개를 적절히 잘 해야 한다.
- 적절히 잘 썪어서 잘해야 한다.
- 사용법
- C0304개념01무한반복과입력 문제
- C0304문제01
- 반복문 밖에다가 변수를 적을 때의 기준
- 반복문 전체를 통해 누적, 추적하고 싶은 값 → 반복문 밖에서 선언
- 한 번의 반복만 필요하거나 매번 초기화가 필요한 값 → 반복문 안에서 선언
- int sum = 0; // 누적 합계를 저장할 변수, 처음엔 0
for (int i = 1; i <= 5; i++) {
sum += i; // sum = sum + i; 와 같음
}
System.out.println(sum); // 결과: 15 - 🔍 반복되는 과정을 직접 살펴보면
-
i (반복변수) sum 계산 과정 sum 값
1 0 + 1 1 2 1 + 2 3 3 3 + 3 6 4 6 + 4 10 5 10 + 5 15
- 반복문 밖에다가 변수를 적을 때의 기준
package C0304반복문입력_문제;
import java.util.Random;
import java.util.Scanner;
/*
[문제]
1. 랜덤 구구단 게임을 10회 반복한다.
2. 정답을 맞추면 1문제 당 10점이다.
3. 게임 종료 후, 성적을 출력한다.
4. 단, 3회 틀리면 게임을 즉시 종료하여, 0점이 된다.
*/
public class C0304문제01 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random ran = new Random();
int wrongCount = 0; //오답 횟수
int count = 0; //정답 횟수
//반복문 밖에다가 선언한 이유.
//반복문이 돌아가는 동안 계속 누적해서 정답/오답을 체크해야 하기 때문입니다.
//누적이 되야 하니까.
for(int i = 1; i<= 10; i++) {
int x = ran.nextInt(8)+2;
int y = ran.nextInt(9)+1;
int answer = x * y;
System.out.println(x + "x"+y+" =?");
int myAnswer = scan.nextInt();
if(answer == myAnswer) {
count += 1;
System.out.println("정답!");
}else {
wrongCount += 1;
System.out.println("오답!");
if(wrongCount == 3) {
System.out.println("3회 틀렸씁니다! 게임을 종료합니다. ");
count = 0;
i = 100;
//?? 이걸 100으로 해서. 반복문은 10번 반복하는데.
//100으로 바꿔서 반복문이 종료되나?
//i를 100으로 강제로 바꾸면 i <= 10 조건이 거짓이 되면서 반복문이 즉시 종료됩니다.
}
}
}
int score = count * 10;
System.out.println("점수 = " + score +"점");
scan.close();
}
}
- C0304문제03
package C0304반복문입력_문제;
import java.util.Random;
/*
[문제]
1 ~ 99999 사이의 랜덤 숫자를 저장하고
자리 수가 몇 자리인지 구하시오.
예)
8 : 1자리
102 : 3자리
88 : 2자리
919 : 3자리
*/
public class C0304문제03 {
public static void main(String[] args) {
Random ran = new Random();
int rNum = ran.nextInt(99999)+1;
//+1 한 이유
//이게 중요한 이유: 0은 자릿수 계산에서 제외해야 하니까!
//rNum = 919;
System.out.print(rNum);
int temp = rNum;
//굳이 탬프에 넣은 이유? rNum을 보호? 잊지 않기 위해?
//반복문에서 rNum을 나누게 되면 값이 사라지기 때문에, 원래 숫자를 보존하기 위해 temp에 복사한 거예요.
//즉, rNum을 나중에 또 써야 할 경우 대비해서 "백업"하는 겁니다.
int count = 0; //자릿수를 누적할 변수
boolean run = true; //반복문을 계속 돌릴지 결정하는 조건 변수
while(run) {
temp /= 10; //?
//숫자를 10으로 계속 나누면서 자릿수를 센다
count += 1;
if(temp == 0) {//더 이상 나눌 수 없으면 (숫자가 0이 되면) → 반복 종료
run = false;
}
}
System.out.println(" : " + count + "자리");
}
}
ChatGPT의 말:
아주 중요한 질문이에요.
결론부터 말하면: 당연히 효과 있습니다. 그리고 그건 아주 올바른 학습 방식이에요. 💪
✅ 지금 당신의 학습 방식
정리해보면:
- 문제를 본다
- 답지를 보고 직접 따라 친다 (코드 복습)
- 코드를 분석해서 이해하려 한다
- 모르면 질문한다
→ 이건 프로그래밍을 잘 배우는 사람들이 실제로 쓰는 **“모방 → 이해 → 응용”**의 흐름이에요.
💡 왜 이 방식이 효과가 있는가?
1. 코딩은 글이 아니라 기술
- 처음부터 문제를 스스로 푸는 건 어렵습니다.
- 마치 자전거를 배우는데 "이론부터 외워서" 타려는 것과 같아요.
→ 처음엔 무조건 따라 하면서 감각을 익혀야 해요.
2. "쳐보는 것"은 근육 기억
- 코드를 타이핑하면서:
- 문법 구조가 손에 익고
- 반복되는 패턴이 눈에 들어오고
- 뇌가 그 구조에 익숙해집니다
→ 이건 이해보다 더 강력한 기억 방식이에요.
(코딩은 눈으로만 봐서는 안 늘어요.)
3. 이해하려는 자세가 제일 중요
- 그냥 베끼는 게 아니라 "왜 이렇게 했지?"를 생각하고
- ChatGPT에게 질문해서 해결하려는 습관은 문제를 스스로 해결하는 능력을 키워줘요
→ 이게 바로 코딩 실력의 핵심입니다.
🧠 아직 문제를 스스로 못 푼다고 걱정할 필요 없음
- 지금은 “입력과 출력 사이를 해석하는 뇌 회로”를 만드는 중이에요.
- 시간이 지나면 점점 자연스럽게 문제를 보고 흐름이 떠오르게 됩니다.
- 오히려 너무 빨리 “스스로 풀기”에 집착하면 지치고 포기할 수 있어요.
📈 다음 단계로 갈 수 있는 시기
지금 방식이 익숙해지면, 이렇게 넘어가면 좋아요:
현재 | 답 따라치기 → 이해 → 질문하기 |
다음 | 답을 보기 전에 먼저 문제 흐름 상상해보기 |
그다음 | 간단한 문제는 힌트 없이 직접 시도 |
예시:
- 답을 보기 전에 “음… 이건 반복문 쓸 것 같아” 정도만 생각해도 충분한 발전이에요.
✅ 요약
지금처럼 “따라 치고, 이해하고, 질문하는” 학습은 아주 효과적이고 올바른 방식이에요.
스스로 푸는 건 지금 이해와 연습이 쌓이면 반드시 따라오게 됩니다.
- 처음에는 따라치고.
- 그다음에 ai한테 힌트를 부탁해서. 내가 풀어보기
- C0304문제04
- int count = 0
- 이것은 언제든지 변할 수 있음
- count = 1;
- 즉 = (같다) 는 초기화. 재설정이다.
- count += 1
- 값을 계속해서 누적하겠다.
- int count = 0
package C0304반복문입력_문제;
import java.util.Random;
/*
[문제]
랜덤으로 1~10을 10번 출력하고
가장 큰 수를 출력하시오.
단, 가장 큰 수가 여러번 나온 경우
중복 출력된 횟수도 함께 출력하시오.
*/
public class C0304문제04 {
public static void main(String[] args) {
Random ran = new Random();
int count = 0;
//반복문 밖에서 최초 선언
//처음에는 0으로 초기화해 둠 (아직 아무 일도 안 일어난 상태)
int max = 0;
for(int i = 0; i<10; i++) {
int num = ran.nextInt(10)+1;
System.out.print(num + " ");
if(num > max) {
max = num;
count = 1;
//특정 조건일 때, 기존 값을 무시하고 새 값으로 덮어씀
//예: “이제 count는 1이다” → 초기화 or 재설정
}else if(num == max) {
count += 1;
//조건이 성립될 때마다 기존 값에 1을 더함
//예: "기존 count가 3이었다면, 지금은 4로 증가시켜라" 즉, 누적
}
}
System.out.println();
System.out.println(max);
System.out.println(count);
}
}
- C0304문제05
- 2~3번 풀어서 품!
package C0304반복문입력_문제;
import java.util.Random;
import java.util.Scanner;
/*
[문제]
Up & Down 게임
1. com은 랜덤으로 1~100 사이의 숫자를 저장한다.
2. me는 1~100 사이의 숫자를 입력한다.
3. com과 me를 비교해서
com이 me보다 크면 "크다"
com이 me보다 작으면 "작다"
등의 힌트를 제공한다.
4. 정답을 맞추면 게임은 종료된다.
*/
public class C0304문제05 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random ran = new Random();
int com = ran.nextInt(100)+1;
System.out.println(com);
boolean run = true;
while(run) {
System.out.println("1~100까지 숫자를 적어주세요");
int me = scan .nextInt();
if(com == me) {
System.out.println("정답");
run = false;
}else if(com > me) {
System.out.println("작다!");
}else if(com < me) {
System.out.println("크다");
}
}
scan .close();
}
}
- C0304문제07
package C0304반복문입력_문제;
import java.util.Random;
import java.util.Scanner;
/*
[문제]
1 ~ 10000 사이의 숫자를 입력받고
자리별 홀수의 개수를 출력하시오.
[예시]
561 : 2개
1 : 1개
668 : 0개
9999 : 4개
*/
public class C0304문제07 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random ran = new Random();
System.out.println("1~1000 숫자 입력 : ");
int num = scan.nextInt();
int temp = num;
//원래 입력값을 보존하고, temp를 자리수 분해용으로 사용하기 위해서예요.
int count = 0; //홀수 자릿수의 개수를 세기 위한 변수입니다.
boolean run = true;
while(run) {
int unit = temp % 10;
//% 10을 이용해 마지막 자릿수만 추출합니다.
System.out.print(unit +" ");
if(unit % 2 != 0) {
count += 1;
//홀수면 count를 1 증가시킵니다.
}
temp /= 10; //자릿수를 줄입니다.
//이렇게 하면서 하나씩 뒤에서 앞으로 잘라 나가요.
if(temp ==0) {
run = false; //더 이상 남은 자릿수가 없으면 while 종료
}
}
System.out.println();
System.out.println(num +" : " + count + "개");
scan.close();
}
}
'코딩 > 2-JAVA' 카테고리의 다른 글
C0404규칙찾기, C0405규칙찾기입력, C0405행렬 (0) | 2025.06.23 |
---|---|
C04배열 => C0401날짜 , C0402중복숫자 , C0403교환 (1) | 2025.06.20 |
C03반복문 => C0301공약수 ~ C0303연립방정식_개념연습 (0) | 2025.06.19 |
C02조건문 (0) | 2025.06.19 |
C0101방정식 ~ C0105입력 (0) | 2025.06.19 |