코딩/2-JAVA

C03반복문 => C0304반복문입력

tree0505 2025. 6. 20. 10:46
반응형
  • 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. 코드를 분석해서 이해하려 한다
  4. 모르면 질문한다

→ 이건 프로그래밍을 잘 배우는 사람들이 실제로 쓰는 **“모방 → 이해 → 응용”**의 흐름이에요.


💡 왜 이 방식이 효과가 있는가?

1. 코딩은 글이 아니라 기술

  • 처음부터 문제를 스스로 푸는 건 어렵습니다.
  • 마치 자전거를 배우는데 "이론부터 외워서" 타려는 것과 같아요.
    처음엔 무조건 따라 하면서 감각을 익혀야 해요.

2. "쳐보는 것"은 근육 기억

  • 코드를 타이핑하면서:
    • 문법 구조가 손에 익고
    • 반복되는 패턴이 눈에 들어오고
    • 뇌가 그 구조에 익숙해집니다

→ 이건 이해보다 더 강력한 기억 방식이에요.
(코딩은 눈으로만 봐서는 안 늘어요.)

3. 이해하려는 자세가 제일 중요

  • 그냥 베끼는 게 아니라 "왜 이렇게 했지?"를 생각하고
  • ChatGPT에게 질문해서 해결하려는 습관은 문제를 스스로 해결하는 능력을 키워줘요

→ 이게 바로 코딩 실력의 핵심입니다.


🧠 아직 문제를 스스로 못 푼다고 걱정할 필요 없음

  • 지금은 “입력과 출력 사이를 해석하는 뇌 회로”를 만드는 중이에요.
  • 시간이 지나면 점점 자연스럽게 문제를 보고 흐름이 떠오르게 됩니다.
  • 오히려 너무 빨리 “스스로 풀기”에 집착하면 지치고 포기할 수 있어요.

📈 다음 단계로 갈 수 있는 시기

지금 방식이 익숙해지면, 이렇게 넘어가면 좋아요:

단계방법
현재 답 따라치기 → 이해 → 질문하기
다음 답을 보기 전에 먼저 문제 흐름 상상해보기
그다음 간단한 문제는 힌트 없이 직접 시도
 

예시:

  • 답을 보기 전에 “음… 이건 반복문 쓸 것 같아” 정도만 생각해도 충분한 발전이에요.

✅ 요약

지금처럼 “따라 치고, 이해하고, 질문하는” 학습은 아주 효과적이고 올바른 방식이에요.
스스로 푸는 건 지금 이해와 연습이 쌓이면 반드시 따라오게 됩니다.


 

  • 처음에는 따라치고.
  • 그다음에 ai한테 힌트를 부탁해서. 내가 풀어보기 

  • C0304문제04
    • int count = 0 
      • 이것은 언제든지 변할 수 있음 
    • count = 1; 
      • 즉 = (같다) 는 초기화. 재설정이다. 
    • count += 1 
      • 값을 계속해서 누적하겠다. 

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();

 

}

}


 

반응형