23.07.26 알고리즘 문제풀이(몫 구하기, 배열 두배 만들기,) / 서브웨이 키오스크 (2)

2023. 7. 28. 17:49IOS [ Swift ]

알고리즘이라는것이 코딩에서 굉장히 중요한걸 알게되었다.

 

코드를 짜기위해서는 단순히 어떻게 짜세요 . 네 . 이러고 바로 짜지는게아니라

어떻게 어떻게 짜겠다는 계획과 기술적고민을 해야된다는걸 알아서 알고리즘에대한 문제풀이를 

열심히 해보려고한다. ( 하루 5문제 목표 )

 

프로그래머스라는 페이지의 알고리즘을 차례대로 풀어보았다.

먼저 몫 구하기 ( 거의 난이도 순으로 정렬 되어있음 )

우선 func으로 함수 만들어주고 

num1 이랑 num2 값 숫자로 받을거니 int로 형변환 !

 

num1 을 num2 로 나눌 거니까 num1/num2를 해줄거고

변하지 않는 수니 let answer로 객체지정해준다.

 

그다음 리턴값으로 answer를 주면 나눈값( ex 10을 5로 나누면 5가 두번들어가서 2 ) 이 출력된다.

 

나눈 몫이라는게 잘 이해가 안됬는데 왼쪽입출력 예를 보고 다행히 알아챘다. 

왜 이런 사소한 것 조차 이해가 어려울까 라는 생각을하며 가슴이 답답했지만

 

엣큥

하고 금방 잊어버렸다

( 감정낭비할 시간 아까움 )

 

 배열을 두배로 만드는 문제이다.

numbers 에 속한 원소들을 각 두배씩 곱하여 리턴해줘야하는데,

어떻게 짜지 고민하며 자료를 찾아보다가

 

map이라는 변수를 사용하면 쉽게 정리될것같아 사용하였다.

 

map 이 무엇이냐 ? 

사용성은 거의 fot - in 문과 비슷하다고 한다.

그러나 코드가 직관적이고 간결하면 무조건 좋은 코딩의 특성상 간결하게 쓸 수 있다는 이점이있고

재사용에도 용이 하다고한다 ( 이건 직접 본적없어서 이해 잘 안감 )

 

예를들어 let numArray = [1,3,5,7,9] 라는 코드가있으면

for - in 문을 사용 하였을때는 ,

var multiArray = [Int]()

// 멀티어레이라는 객체는 int값

 

for num in numArray{

multiArray.append(num*2)

}

// numArray 안에서 num 이 순서대로 돌아갈때, multiArray에 num*2값을 추가해주어라.

 

요런식으로 짜주어야하는데,

map 을 사용하면

 

let multiArray = numArray.map { $0*2 }

// multiArray 는 numArray 를 map{ [] 안의 각 값에 * 2를 돌면서 다 해준다 }

처럼 간단하게 축약이 가능하다!

 

다음은 배열 뒤집기이다.

이것도 어떻게 해야되지 라는 막막함이 있었는데 , reversed 라는 아주 좋은 코드를 발견했다.

정수가 들어있는 num_listdml 값을 reversed() 해준다 라는

return num_list.reversed()

내용으로 출력해주면 , 

안에있던 [1,2,3,4,5] 가 [5,4,3,2,1] 로 변한다.

 

이런 축약코드들은 어디에 활용할지를 잘 생각해보고 활용하면 굉장히 편리할 것 같다.

요 문제는 문자열 뒤집기 인데, 바로 이전문제인 배열뒤집기처럼 하면 되는거 아니야?! 하면서

바로 reversed를 사용해봤지만 어림도없었다.

물론 reversed 를 사용하는건 맞지만 , 활용 방식이 조금은 틀렸다.

 

우선 my_string의 값이 문자이기때문에 , string으로 출력하겠다고 선언 후

result(결과) : string(문자값이다) = string(my_string.reversed())(마이스트링을 뒤집은값도 스트링이다)

 

처럼 코드를 짜는것같다.

그러나 이문제는 잘 모르겠어서 답을 보고 적었음에도 이해가 되지않았다.

나중에 내가 성장하면 다시 이해해 보도록 해야겠다.

 오늘의 마지막 문제다.

가위바위보 로직인데, 가위는 2 바위는 0 보는 5 라는 숫자를 대입하고

rsp라는 매개변수에 205가 차례대로 들어가 있는 상태.

 

결국 나는 for - in 문을 사용하여

( 위에서 더 쉬운 map을 알았지만서도 아직 숙련도가 낮아 for -in 사용 )

 

if문을 넣고, 만약에~ rsp를 돌고있는 a의 값이 2이면 b에 0이라는 문자를 추가해~ 

하는방식으로 3가지모두 진행하고

 

b의값을 return 해주는 식으로 코드를 작성 하였다.

 

앗참 그리고 b는 "" 안에 들어가는 문자형식으로 출력하기위해 var로 객체선언하여 string값을 주었다.

 

 

서브웨이 키오스크도 오늘 더 진행하였으나 git hub에서 팀원들이 굉장한 고난을 겪고있어

진행이 더딘상태가 되어버렸다.

 

내일은 그 git에 대한 내용을 적어 보도록 하겠다.