While로 sum구하기
실습 1-4
public class SumWhile {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.println("1부터 n까지의 합을 구합니다");
System.out.print("n의 값 : ");
int n = stdIn.nextInt();
int sum = 0;
int i = 1;
while (i <= n) {
sum = sum+i;
i++;
}
System.out.println("1부터 "+n+"까지의 합은 "+sum+"입니다.");
}
}
결과
1부터 n까지의 합을 구합니다
n의 값 : 88
1부터 88까지의 합은 3916입니다.
** while문 반복
어떤 조건이 성립하는 동안 처리를 반복하여 실행하는 것을 반복구조라 하며 일반적으로 루프라고 부른다. 이때 while문은 실행 전에 반복을 계속할지를 판단하는데, 이런 구조를 '사전 판단 반복 구조'라고 부른다. 제어식의 평갓값이 0이 아니면 프로그램 명령분이 반복된다.
연습문제 6 - 실습 1-4에서 while문이 종료될 때 변수 i값이 n+1이 됨을 확인하라
public class SumWhile {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.println("1부터 n까지의 합을 구합니다");
System.out.print("n의 값 : ");
int n = stdIn.nextInt();
int sum = 0;
int i = 1;
while (i <= n) {
sum = sum+i;
i++;
if(i > n) {
System.out.println("변수 i값은 n+1인 "+i+"입니다");
}
}
System.out.println("1부터 "+n+"까지의 합은 "+sum+"입니다.");
}
}
결과
1부터 n까지의 합을 구합니다
n의 값 : 45
변수 i값은 n+1인 46입니다
1부터 45까지의 합은 1035입니다.
--> while문이 종료될 때 == 조건이 성립하지 않을 때 == i > n 일 때 i값 출력
For로 sum구하기
실습 1-5
public class SumFor {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.println("1부터 n까지의 합을 구합니다");
System.out.print("n의 값 : ");
int n = stdIn.nextInt();
int sum = 0;
for (int i=0; i <= n; i++) {
sum = sum+i;
}
System.out.println("1부터 "+n+"까지의 합은 "+sum+"입니다.");
}
}
결과
1부터 n까지의 합을 구합니다
n의 값 : 22
1부터 22까지의 합은 253입니다.
** for문 반복 - for(초기화 부분; 제어식; 업데이트 부분) 명령문
초기화 부분은 for문을 실행하기 전에 한번만 실행한다. 제어식을 평가한 값이 true이면 for문의 명령문을 반복한다.
명령문을 실행한 다음에는 업데이트 부분을 실행한다.
연습문제 7- n이 7이면 1+2+3+4+5+6+7=28로 출력하는 프로그램을 작성하라
public class SumFor {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.println("1부터 n까지의 합을 구합니다");
System.out.print("n의 값 : ");
int n = stdIn.nextInt();
int sum = 0;
String appendText;
String finalText ="";
//StringBuilder sb = new StringBuilder();
for (int i=0; i <= n; i++) {
sum = sum+i;
appendText = i >= n ? String.valueOf(i) : (i+"+");
//sb = sb.append(appendText);
finalText = finalText.concat(appendText);
}
//System.out.println(sb+"="+sum+"입니다.");
System.out.println(finalText+"="+sum+"입니다.");
}
}
결과
1부터 n까지의 합을 구합니다
n의 값 : 7
0+1+2+3+4+5+6+7=28입니다.
테스트 해보니 StringBuilder를 사용하거나 concat해주는 방법으로 둘 다 가능함!
연습문제 8- 1부터 10까지의 합은(1+10)*5와 같은 방법으로 구할 수 있다. 가우스의 덧셈이라는 방법을 이용하여 1부터 n까지의 정수 합을 구하는 프로그램을 작성하라
public class ForSum {
static int forSum(int a){
int result =0;
if(a%2==0){
result = (1+a)*(a/2);
}else{
result = (1+a)*(a/2)+(a-(a/2));
}
return result;
};
public static void main(String args[]){
Scanner stdIn = new Scanner(System.in);
System.out.print("정수 a :");
int a = stdIn.nextInt();
System.out.println("정수 1부터 a까지의 가우스의 덧셈 결과는 "+forSum(a)+" 입니다");
}
}
결과
정수 a :7
정수 1부터 a까지의 가우스의 덧셈 결과는 28 입니다
https://sallykim5087.tistory.com/227
오,,, 책에 있는 답 말고 구글링하다가 나랑 같은 문제 푸신 분이 계셨다!! 과정을 보니 내가 if/else 분기 태운걸 삼항연산자로 바꿔야겠단 생각이 들었다. 짝수 일 때랑 홀수 일 때 들어가는 식이 완전 다르다고 생각해서 분기 태웠는데 자세히 들여다보니 더해주는 값만 다르고 앞에는 같았음을 나중에 인지했다. 그리고 (a-(a/2))이겈ㅋㅋㅋㅋ 최대값에서 몫빼면 저렇게 되지 않을까 하고 했는데 ^^;; ㅎ..머쓱ㅎ
result = (a+1)*(a/2)+(a%2==0) ? 0 : (a+1/2));
연습문제 9- 정수 a,b를 포함한 그 사이 모든 정수의 합을 구하여 반환하는 메서드를 작성하라
public class SumFor {
static int sumof(int a, int b) {
int sum = 0;
for(int i=a; i <=b; i++) {
sum = sum+i;
}
return sum;
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.println("정수 a,b를 포함한 그 사이의 모든 정수의 합을 구합니다");
System.out.print("a의 값 : ");
int a = stdIn.nextInt();
System.out.print("b의 값 : ");
int b = stdIn.nextInt();
System.out.println("a와 b를 포함한 모든 정수의 합은 "+sumof(a,b)+"입니다");
}
}
결과
정수 a,b를 포함한 그 사이의 모든 정수의 합을 구합니다
a의 값 : 5
b의 값 : 8
a와 b를 포함한 모든 정수의 합은 26입니다
do while
실습 1-6
public class ForSum {
public static void main(String args[]){
Scanner stdIn = new Scanner(System.in);
int n;
System.out.println("1부터 n까지의 합을 구합니다");
do{
System.out.print("n의 값 :");
n = stdIn.nextInt();
}while(n<=0);
int sum =0;
for(int i=1; i<=n; i++){
sum = sum+i;
}
System.out.println("1부터 "+n+" 까지의 합은 "+sum+"입니다.");
}
}
** do 문
일단 루프 본문을 한 번 실행한 다음에 계속 반복할 것인지를 판단하는 사후 판단 반복문이다. while문과 마찬가지로 ()안의 제어식을 평가한 값이 0이 아니면 루프 본문의 명령문이 반복된다.
**사전 판단 반복과 사후 판단 반복의 차이점
사전 판단 반복문인 while문과 for문은 처음에 제어식을 평가한 결과가 0이면 루프 본문은 한번도 실행하지 않는다. 이와 달리 사후 판단 반복문인 do문은 루프 본문이 반드시 한 번은 실행된다.
연습문제 10- 두 변수 a,b에 정수를 입력하고 b-a를 출력하는 프로그램을 작성하시오
public class ForSum {
public static void main(String args[]){
Scanner stdIn = new Scanner(System.in);
int a;
int b;
System.out.print("a의 값 :");
a = stdIn.nextInt();
do{
System.out.print("a보다 큰 값을 입력하세요!");
System.out.print("b의 값 :");
b = stdIn.nextInt();
}while(b<=a);
int result = b - a;
System.out.println("b - a 는 "+result+"입니다");
}
}
결과
a의 값 :5
b의 값 :5
b의 값 :5
b의 값 :4
b의 값 :8
b - a 는 3입니다
while 안 제어문에 음~ b는 a보다 커야지 이러고 b>a이렇게 하고 출력했다가 머야 왜 안되지 하다가 아! 이때까지 반복이니까 반대로 생각해야한다는 걸 깨닫.. 정신차려 !!!
연습문제 11- 양의 정수를 입력하고 자릿수를 출력하는 프로그램을 작성하라
public class ForSum {
public static void main(String args[]){
Scanner stdIn = new Scanner(System.in);
System.out.print("a의 값 :");
int a = stdIn.nextInt();
do{
System.out.println("양의 정수를 입력해주세요!");
a = stdIn.nextInt();
}while(a<=0);
int len = String.valueOf(a).length();
System.out.println("그 수는 "+len+"자리입니다");
}
}
결과
a의 값 :-1
양의 정수를 입력해주세요!
0
양의 정수를 입력해주세요!
555
그 수는 3자리입니다
오늘도 한다. 언제까지? 될 때까지!!!!!!!!
참고 : 자료구조와 함께 배우는 알고리즘 입문 - 자바편
'책 > algorithm' 카테고리의 다른 글
[JAVA Algorithm] - 알고리즘 (0) | 2022.08.10 |
---|