IOS [ Swift ]

23.07.28 알고리즘 천국과 키오스크 코드수정 그리고 과제 최최최종본 제출

oong2 2023. 7. 29. 02:24

오늘 풀어본 알고리즘은 최댓값 만들기숫자찾기 그리고 캐릭터의 좌표이다.

 

물론 나는 아직 기본문법부터가 많이 모자란 상태이어서 내 혼자힘으로는 풀기 힘든것같다.

공부를 진행하면서 느끼는건 매번 벽에부딪히고 매번 박탈감이 들지만서도

애니캐릭터 빙의된 감정같은게 자꾸 든다 ( 애니 잘모름 )

 

자 우선 최댓값 만들기

부터 보겠다

import Foundation

func solution(_ numbers:[Int]) -> Int {
    var sorted = numbers.sorted()
    return sorted[numbers.count-2]*sorted[numbers.count-1]
    
}

처음 이문제를 접했을때 복잡하게 생각하느라 바빴다

var 하나만들어서 거기에 array값으로 배열 만든다음에 

그 배열을 for - in문으로 차례로 돌면서 가장 큰값을 두개 찾고 

각각 곱한다

 

이런개념으로 코드를 짜고있었는데 아뿔싸

 

sorted라는 좋은 함수를 알아버렸다!!!!

 

문제를보면 배열안에 숫자가 랜덤하게 적혀있는데

저 sorted 라는 함수는 무려 이 숫자를 작은순서대로 정렬해줄 수 있는 것 이었다!!

 

그래서 sorted를 함수를 사용하여 배열안의 숫자들을 작은순대로 정리해버린후 ,

그 배열안의 맨끝에 두개를 곱하면 가장 큰 수 두개를 곱하는거나 마찬가지가 되어버린다.

 

정말 코딩의 세계는 무궁무진하면서도 머리아픈것같다. 

그래도 늘 공부하며 하나하나 배워가는느낌이다.

 

다음은 숫자찾기 문제이다

 

import Foundation

func solution(_ num:Int, _ k:Int) -> Int {
    var k = [1,4,7]
    var count = 0
    
    var t = Character(k)
    
    for a in num {
        if a > 0 {
            count += 1
            if a == t[0] {
                break
            }
            if a == t[1] {
                 break
            }
            if a == t[2] {
                return -1
                 break
            }
        }
    }
    return count
}

참고로 이문제는 아직 풀지못했다 ..

 

대충 구상으로는 k의 값이 1,4,7이니까

count값을 0부터 시작하게한다음에 

for - in문으로 num을 a가 차례대로돌면서 

a가 0보다 클때마다 count를 한개씩늘리고, k 배열의 각각 자릿수랑 a의 값이 같으면 멈춰서

count값을 출력한다. 라는 개념으로 짜고있긴한데

 

정답이 아니라고 뜨는중이다.

 

근데 이 블로그 포스팅 진행하면서 뭔가 갑자기 고칠수있을것같다는 생각이든다 . 오늘은 너무늦었으니까 내일이나 모래 주말활용해서

다시 풀어봐야지 헤헤

 

다음은 캐릭터의 좌표구하기이다.

 

import Foundation

func solution(_ keyinput:[String], _ board:[Int]) -> [Int] {
    
    var x:Int = 0
    var y:Int = 0
    
    var solve:[Int] = [x,y]
    
    
    for i in keyinput{
        
        // max.board = (4,-4)
        
        switch i{
            
            case "up" : solve[1] += 1
            case "down" : solve[1] -= 1
            case "left" : solve[0] -= 1
            case "right" : solve[0] += 1
            
            default : break
        } 
    }
    
    if board{[]}
    
    // array  첫번째값에 x를 주고 2번째 값에 y를 준다.
//     입력할떄마다 array값을 각 방향에 맞게 +나 -해준다
    
//     up [0,1]
//     down [0,-1]
//     left [-1,0]
//     right [1,0]
    
    return solve
}

 

밑에 조건이 더 있긴한데 대충 이런문제이다.

 

딱 봐도 난이도가 꽤 있어보여서 지레 겁먹었는데, 정신차리고 다시 생각을 가다듬었다.

어떻게 풀면 좋을지 고민고민 하면서 생각한 결과

 

solve 라는 리턴값만들어서 거기 [x,y] 배열 넣은다음에 ,

x,y값을 0에서 시작하게한 후 

캐릭터를 움직일때마다 계속 확인해야 하니까 for - in문을 사용하고,

조건문 switch를 넣어서 각각의 방향키 케이스를 만들어주었다.

 

그 각각의 케이스 안에는 solve의 배열안의 x,y값을 일치하면 +하거나 -하도록 설정해두었다.

 

이렇게하니까 예제문제 1번은 풀렸는데 , 2번문제가 풀리지않았다.

 

아마 board라는 조건에대한 코드를 아직 짜지않아서 인것같은데 , board조건은 어떻게 시작해야할지 감도안온다.

다음에 다시 풀어볼때 좀 찾아보면서 참고해야지!!!!!

 

 

그리고 오늘은 대망의 과제 최종 제출일 이었다.

⬆️ 메뉴판과 주문하기 선택시 나오는창
⬆️ 실제 서브웨이에서 재료를 빼달라고 하듯 커스텀메뉴에도 재료선택이 가능하다. ( 돈이 부족하면 구매도못하고 장바구니에도 담기지않는다 )
⬆️ 3번 11조랜드를 가면 타이핑알바라던가 야바위게임이라던가 돈을 벌 수 있는 수단을 마련해두었다.
⬆️ 타이핑 알바를 선택하면 이런식으로 단계가나오고, 단계선택시 문제를 똑같이 입력하면 입금을받는다.
⬆️ 내가 구현한 부분은 이부분이다 . 지갑을 보여주고 11조랜드에서 돈을받거나 샌드위치를 살 때 출금을 하는등의 로직을 마련해두었다.

 

 

코드리뷰도 하면 좋을텐데 매일매일 하루가 너무 바쁜탓에 피로누적이 심하다..

다음에 기회가 되면 공유해보는걸로 !