실습 중...
과제 :
[조건문+함수]
세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
ex) 12, 51, 3 -> 12
// 세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
// ex) 12, 51, 3 -> 12
// 1. fun main 함수 작성(매개변수 작성x)
// 2. fun second 함수 작성
// 3. 변수 쓰고 조건문 쓰면 될꺼 같은데..?
// 4. 만약 a>c, c출력..?
//
fun main () {
println(second(12, 51, 3))
}
fun second (a:Int, b:Int c:Int) {
if(a>c) {
println
}
}
//대충 의사코드 작성하고, 코드 적어보고 생각안나면 의사코드 작성하고 다시 코드 적기..
//선생님이 자꾸 코드 쓰다가 의사코드 적고 빌드에러 너무 많이 난다고 했다. 의사코드는 문제가 없는데 코틀린 기초 문법이 부족한거라고 했다.
//어떻게 알았지..?
//의사코드 적다가 막히면 코드쓰고 코드쓰다 막히면 출력해보고 당연히 에러나고 다시 의사코드 적어보고 왜안돼지? 재미없다..하고 있었는데
//순서대로 첫줄부터 마지막줄까지 적으라고 했다..
//내 코드가 어디가 에러난지 모르니까 run 해보고 메시지보고 에러난 부분 수정해 나가려고 계속 run한건데...
//계속 막혀있으니
//경우의수를 생각해보라고했다. 그러니까,
// 세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
// ex) 12, 51, 3 -> 12
// 1. fun main 함수 작성(매개변수 작성x)
// 2. fun second 함수 작성
// 3. 변수 쓰고 조건문 쓰면 될꺼 같은데..?
// a b c
// a c b
// b a c
// b c a
// c a b
// c b a
//
fun main () {
println(second(12, 51, 3))
}
fun second (a:Int, b:Int, c:Int) {
if(a>b>c){
return b
}
if(a>c>b){
return c
}
if(b>a>c){
return a
}
if(b>c>a){
return c
}
if(c>a>b){
return a
}
if(c>b>a){
return b
}
}
//어짜피 6개만 있으니까 노가다가 가능했다.
//이런식으로 짰는데 마지막은 if가 필요가 없고 return 만 있으면 된다고했다. 경우의 수다 6가지 중 5가지를 쓰고 나머지 한 경우는 오직 단 한경우 밖에 없기 때문에 if문을 쓸 필요가 없는 것
//참고로 위 코드도 안된다. if는 boolean인데 int랑 값이 안맞는다
//어떻게 고칠지 모르니까 챗지피티한데 물어봤당
// 세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
// ex) 12, 51, 3 -> 12
// 1. fun main 함수 작성(매개변수 작성x)
// 2. fun second 함수 작성
// 3. 변수 쓰고 조건문 쓰면 될꺼 같은데..?
// a b c
// a c b
// b a c
// b c a
// c a b
// c b a
//
fun main () {
println(second(12, 51, 3))
}
fun second (a:Int, b:Int, c:Int) {
//abc
if((a >= b && a >= c) && (b >= c)){
return b
}
//acb
if((a >= c && a >= b) && (c >= b) {
return c
}
//bac
if((b>=a && b>=c) && (a>=c)) {
return a
}
//bca
if((b>=c && b>=a) && (c >= a)){
return c
}
//cab
if((c >= a && c >= b) && (a >=b)){
return a
}
//cba
if((c >= b && c>=b) && (b >= a)){
return b
}
}
Type mismatch: inferred type is Int but Unit was expected
Expression '(c >= b)' of type 'Boolean' cannot be invoked as a function. The function 'invoke()' is not found
'return' is not allowed here
Type mismatch: inferred type is Int but Unit was expected
Expecting ')
Type mismatch: inferred type is Int but Unit was expected
Type mismatch: inferred type is Int but Unit was expected
Expression '(a >=b)' of type 'Boolean' cannot be invoked as a function. The function 'invoke()' is not found
'return' is not allowed here
Type mismatch: inferred type is Int but Unit was expected
Expecting ')
Type mismatch: inferred type is Int but Unit was expected
//챗지피티코드 보고 이해하고 노가다로 썼는데 오류가 잔뜩 났다
//개어이없다 그래서 챗지피티 코드랑 내 코드랑 비교를 해봤다
이하 챗 지피티 코드
fun main() {
println(second(12, 51, 3))
}
fun second(a: Int, b: Int, c: Int): Int {
if ((a >= b && a >= c) && (b >= c)) {
return b
}
if ((a >= b && a >= c) && (c >= b)) {
return c
}
if ((b >= a && b >= c) && (a >= c)) {
return a
}
if ((b >= a && b >= c) && (c >= a)) {
return c
}
if ((c >= a && c >= b) && (a >= b)) {
return a
}
if ((c >= a && c >= b) && (b >= a)) {
return b
}
return a // This line will be reached if all three numbers are the same
}
//괄호 하나 빠진거 있으니 수정을 하자
//조건문 안에 순서가 다른데 어짜피 and로 연결되어있으니까 상관없다
// 마지막에 return a도 빠져있다 a는 a,b,c가 모두 같은 값일 때 출력한다
//그리고 second 함수에 :Int가 빠져있더니 'Type mismatch: inferred type is Int but Unit was expected' 오류가 났다 옆에 Int를 써주니 안났다
//run 해보니 된다 이제 들여쓰기를 수정해준다
// 세개의 Int a,b,c가 주어졌을 때 두번째로 큰 수를 Int로 반환하는 함수
// ex) 12, 51, 3 -> 12
// 1. fun main 함수 작성(매개변수 작성x)
// 2. fun second 함수 작성
// 3. 변수 쓰고 조건문 쓰면 될꺼 같은데..?
// a b c
// a c b
// b a c
// b c a
// c a b
// c b a
//
fun main () {
println(second(12, 51, 3))
}
fun second (a:Int, b:Int, c:Int) : Int {
//abc
if((a >= b && a >= c) && (b >= c)){
return b
}
//acb
if((a >= c && a >= b) && (c >= b)) {
return c
}
//bac
if((b>=a && b>=c) && (a>=c)) {
return a
}
//bca
if((b>=c && b>=a) && (c >= a)){
return c
}
//cab
if((c >= a && c >= b) && (a >=b)){
return a
}
//cba
if((c >= b && c>=b) && (b >= a)){
return b
}
return a
}
//최종코드 완성
//챗지피티야 고마워~
유익한 글이었습니다.