금요일 과제)
운행거리에 따라 택시 요금을 계산하는 프로그램
2000m까지는 기본요금 900원이고,
2000m초과 운행시 200m단위마다
기본요금에 100원씩 가산하여 요금을 계산한다
예) 운행거리 :3000m
기본요금 :900원
초과거리 1000m
초과요금 500원
//내 풀이
int more = 3000;
int money = 900 ;
int y=more-2000 ;
if (more<=2000){
System.out.println(money);
}else if(more>2000&&(y%200)%2==1){
System.out.println(money+(y+1));
}else if(more>2000&&(y%200)%2==0){
System.out.println(money+((y)));
}//if end
출력결과
1900
//선생님 풀이
int distance = 3000; //총운행거리
int fee = 0; //기본요금
int overFee = 0; //추가요금
if (distance<=2000) {
fee = 900;
}else {
int exceed = distance-2000; //초과거리
overFee = (exceed/200) * 100;
fee = 900 + overFee;
}//if end
System.out.println("총운행거리 : " + distance);
System.out.println("기본요금 : 900");
System.out.println("추가요금 : " + overFee);
System.out.println("전체요금 : " + fee);
출력결과
총운행거리 : 3000
기본요금 : 900
추가요금 : 500
전체요금 : 1400
*내 풀이
미완성풀이, 못 풀었다는 거다 ㅋㅋㅋ
초과거리를 변수 y로 선언후 y를 %200으로 한 나머지의 짝홀수 분별법으로 하려고 했는데 결과는 폭망
200m단위로 움직이니, 1m를 초과해도 200m값의 가격을 내야한다. 그래서 홀수로 떨어질땐 무조건 +1을 하여
초과거리에 곱해야겠다고 생각을 했는데... 짝꿍에게 내 코딩을 보여준 후, y%200 이 식에서 만약 y가 200이하일 경우
y가 그대로 출력이 되니 말이 안된다는 피드백을 해주었다. ㅁㅣ 완 성 풀이가 아닌 틀린 거..
*선생님 풀이
,,
어제자 문제 7 ) 다음식의 결과를 구하시오
switch 이론
//선생님 풀이
double hap = 0.0 ;
boolean flag = false ;
for (int a=1; a<100; a++) {
if(flag){
hap = hap - (a/(double)(a+1));
flag = false ;
}else{
hap = hap + (a/(double)(a+1));
flag = true;
}//if end
}//for end
System.out.println(hap);
출력결과
0.6881721793101957
While 반복문
1) while문
while(조건) {조건이 true이면 수행}
while(true){ } -> 무한LOOP / 조건이 true일때엔 계속 반복하므로 무한으로 뺑뺑 돔
for( ; ; ){ } -> 무한LOOP
예제) while
int a =1;
while(a<=3){
System.out.println("JAVA");
a++;
}//while end
출력결과
JAVA
JAVA
JAVA
int a =1;
while(a<=10){
System.out.println("SEOUL");
a++;
}//while end
출력결과
SEOUL
SEOUL
SEOUL
SEOUL
SEOUL
SEOUL
SEOUL
SEOUL
SEOUL
SEOUL
a++; 이 없으면 무한LOOP
예제) while ~ break
int a =1;
while(true){ //무한LOOP
System.out.println("SEOUL");
if(a==5){
break; //반복문 탈출
}//if
a++;
}//while end
출력결과
SEOUL
SEOUL
SEOUL
SEOUL
SEOUL
2) do~while문
형식 : do {
조건이 true이면 수행
} while (조건);
예제) do~while
int b =5;
do {
System.out.println("SEOUL");
b=b+1;
}while(b<=3);
System.out.println(b);
JAVA a=1+1 while(2<=3)
JAVA a=2+1 while(3<=3)
JAVA a=3+1 while(4<=3)
예제) do~while
int b =5;
do {
System.out.println("SEOUL");
b=b+1;
}while(b<=3);
System.out.println(b);
SEOUL b=5+1 while(6<=3)
//조건의 참, 거짓과는 상관없이 무조건 한번은 수행된다.
<do~while 연습문제>
문제 1) x값이 10으로부터 x를 여러번 뺀 후 결과가 음수가 되면 x를 몇번 뺏는가를 구하시오
10-3=7
7-3=4
4-3=1
1-3=-2
//선생님 풀이
int x=3;
int count=0;
int su=10;
while(true){
count++;
su=su-x;
//System.out.println(su);
if(su<0){
break;
}//if
}//while
System.out.println(count);
출력결과
4
->분석 :
while(true)
{ count=0+1
su=10-3
if(7<0) }
while(true)
{ count=1+1
su=7-3
if(7<0) }
문제 2) 어느 달팽이는 낮에는 3cm 올라가고 밤에는 2.5cm 내려온다고 할 때,
달팽이가 13cm의 나무 꼭대기에 올라가려면 며칠이 걸리는지 구하시오.
int day=0; //며칠
double snail=0.0; //달팽이
while(true) {
day++;
snail = snail + 3.0;
if(snail>=13.0){
break;
}else{
snail = snail-2.5;
}
}//while end
System.out.println(day+"일");
출력결과
21일
*13cm에 도달했을 때엔 내려올 필요가 없다. 즉, 하루에 0.5cm 움직이지만 낮에 3cm올라가서 13cm에 도달했다하면,
안내려와도 된다는 말, 문제파악 필요
이중 반복문
*이중 for
구구단, 시계
시계 - 시침이 한칸돌 때 30도, 분침은 한바퀴 돌아야함 360도 (각도로 응용)
예제) 이중반복문
for (int a=1; a<=2; a++){
System.out.println("JAVA");
for(int b=1; b<=3; b++){
System.out.println("SEOUL");
}//for
}//for end
->분석 :
a=1 1<=2
JAVA
b=1 1<=3 SEOUL
2<=3 SEOUL
3<=3 SEOUL
a=2 2<=2
JAVA
b=1 1<=3 SEOUL
2<=3 SEOUL
3<=3 SEOUL
예제) 구구단
for (int a=2; a<=9; a++){
System.out.println(a+"단");
for(int b=1;b<=9; b++){
System.out.println(a+"*"+b+"="+(a*b));
}//for
}//for
구구단은 모두 9줄 -> b 변수 범위설정 9
첫번째 for의 a값이 두번째 for에 들어갔을때 a는 불변 b변수 변화값으로 돌아가고 올라가고
신기하다
도형만들기
1) 사각형 : 등수구할 때 회전수 참조!
for (int a=1; a<=4; a++){ //회전수 4번
for (int b=1;b<=4;b++){
System.out.print("#");
}
System.out.println();
}//for end
출력결과
####
####
####
####
회전수로 돌려돌려 , 멀리보면 사각형모양이 보인다. 선으로 안나옴 ㅋㅋㅋ
4개씩 정렬해야하므로 print만 적어준다. 첫번째 for구문에 ln처리해줘서 엔터하기
->분석 :
a=1
b=1 1<=4 #
2<=4 #
3<=4 #
4<=4 #
a=2
b=1 1<=4 #
2<=4 #
3<=4 #
4<=4 #
2) 삼각형 : 회전수 증가,
예) 로또번호 만들 때,
for (int a=1; a<=4; a++){
for (int b=1;b<=a;b++){
System.out.print("*");
}
System.out.println();
}//for end
출력결과
*
**
***
****
위의 사각형과 한끝차이, 두번째 for구문에 b변수에 a로 대입해 비교하며 빼기해서 출력
->분석 : 할때마다 회전수가 증가
a=1 *
b=1 1<=1 *
a=2 **
b=1 1<=2 *
b=1 2<=2 *
3) 역삼각형 : 회전수 감소,
예) 정렬 알고리즘
for (int a=4; a>=1; a--){
for (int b=1;b<=a;b++){
System.out.print("*");
}
System.out.println();
}//for end
출력결과
****
***
**
*
회전수가 줄어들고 있으므로 a의 변수는 감소,
->분석 :
a=4 ****
b=1 1<=4 *
2<=4 *
3<=4 *
4<=4 *
a=3 ***
b=1 1<=3 *
2<=3 *
3<=3 *
<연습문제>
문제1) @★★★
★@★★
★★@★
★★★@
for(int a=1;a<=4;a++){
for(int b=1;b<=4;b++){
if(a==b){
System.out.print("@");
}else{
System.out.print("*");
}
}//for
System.out.println();
}//for end
행이랑 열값이 같을 때 @,
좌표값을 이용해, (1,1) (2,2) (3,3) (4,4) 을 해서 if절에 같을땐 @ 아닐땐 *로 출력
문제2) ★★★★
★★★
★★
★
사각형이라 생각하고 , 안보이는 곳은 공백으로 생각
//내 풀이
for(int x=1; x<=4; x++){
for(int y=1; y<=4; y++){
if(x==y){
System.out.print("*");
}else if(x>y){
System.out.print(" ");
}else{
System.out.print("*");
}
}//for
System.out.println();
}//for
출력결과
****
***
**
*
//선생님 풀이
for(int x=1; x<=4; x++){
for(int y=1; y<=4; y++){
if(x<=y){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}//for
출력결과
****
***
**
*
이것 역시 좌표의 응용으로 한다
if의 조건을 나눠서 적었다, 세파트로 나워서 조건을 세웠지만 크게 보면 공백과 별 두가지뿐이기 때문에
두가지 조건을 나눠서 하면 됨/
문제3) 12345
23456
34567
45678
56789
한 줄에 있는 숫자 규칙
for (int a=0; a<5; a++){
for(int b=a+1; b<=a+5;b++){
System.out.print(b);
}
System.out.println();
}//for end
문제4) 2g, 3g, 5g짜리 추가 각각 5개씩 있을 때, 세가지의 추의 조합으로 무게가 40~45사이일 때
각 추의 갯수와 무게를 출력하는 프로그램
;출력결과 2g 3g 5g total
int hap=0;
for(int a=1; a<=5; a++){ //2g추
for(int b=1; b<=5; b++){ //3g추
for(int c=1; c<=5; c++){ //4g추
hap=(a*2)+(b*3)+(c*5);
if(hap>=40 && hap <=45){
System.out.println(a+" "+b+" "+c+" "+hap);
}//if
}//for
}//for
}//for end
'공부 > 자바 OOP' 카테고리의 다른 글
5월 22일 - 배열 2+연습문제 (0) | 2019.05.22 |
---|---|
5월 21일 - 배열 1 (0) | 2019.05.21 |
5월20일 - 반복문 For + 연습문제 (0) | 2019.05.20 |
5월 17일 - 제어문 + QUIZ(if, switch) (0) | 2019.05.17 |
5월 17일 - 자바OOP 1 : 연산자 (0) | 2019.05.16 |