티스토리 뷰

반응형

ㅎㅎㅎ글을 많이 쓰게 되네요 ..확실히 코딩하면서 많이 배우는 것 같아요..핳

요새 올라오는 글들은 딱 swift라는 언어를 정리한 글들이 아닌, 제가 궁금해서 찾아본 그런 개념들 밖에 없으니 참고하시길 바랍니다XD

일단, 제가 글을 쓰게 된 이유는...



백준의 N찍기라는 문제입니다. 평범하죠?



~~응 맞았어~₩


백준의 절대불변의 법칙

N찍기를 풀었으면 기찍N을 풀어야한다.


응 짱쉬워~


응 풀었어~~~~~






~ 잠시 뒤 ~




...ㅋ


네..그렇습니다..오류....그래요..오류..왜났지..

저는 당연히 저렇게 하면 될 줄 알았습니다. 5부터 0까지면 그냥 하면 되는거 아닌가요??!?!?

역시 컴파일러는 프로그래머의 상식을 벗어나줘야 재밌는거 아니겠습니까






fatal error: Can't form Range with upperBound < lowerBound


해석하자면 


치명적인 오류 : upperBound < lowerBound를 사용하여 Range를 형성 할 수 없습니다.

ㅎ.ㅎ


그래서 저는 이 오류를 해결하기 위해...구글을 뒤져보았습니다.

역순으로 for문 돌리는 건 언젠가 꼭 필요하자나요..










뒤에서부터 for문 도는법



두가지 방법이 있습니다. 


첫번째 : reversed()함수를 이용한다. 

?reversed?리버스?거꾸로 해주는거? 네 맞습니다. 어떻게하면 될까요? 


for i in (1...Int(input)!).reversed()

{

    print(i)

}

짠! 짱쉽죠!! 정말 ^^ 이거랑 Int(input)!...1 이랑 뭐가 다른건지 ^^ 모르겠지만...

그래도 정말 직관적이죠?

지금 주어진 순서 반대로 for문을 돌아! 라는 뜻이니까요. 




짠~~ㅎㅎㅎ 

이  reversed()함수는 여기에만 쓰일 수 있는 것은 아니랍니다. 


이렇게도 쓸 수 있어요 ㅎㅎㅎ



이제 좀 아실 것 같나요?

그렇다면 다음방법으로 넘어가보죠.



 두번째 방법 : stride()함수를 이용한다.


stride()..?

그 뜻을 살펴보자면

성큼성큼 걷다.(V)

걸음, 걸음걸이, 진전(N)

이라는 뜻을 가지고 있어요.


흐음 그럼 Xcode에서는 어떻게 stride를 쓰고 있을까요? 


for i in stride(from: 5 , to: 0, by: -1)

{

 print(i)

 }

in 다음에 stride 함수를 넣어주게 되는데요, 이 함수도 정말 직관적이죠?

stride ( from : x  , to :  y  , by : z    ) 

전진할거야        x부터                      y까지             z만큼의 보폭으로


라는  뜻으로 볼 수 있어요.

by는 

이러한 뜻을 가지고 있기 때문이죠.

그럼 역순으로 어떻게 돌까요?

네!!from에 큰 값, to에 작은값을 넣고 by로 뭘 하면 될까요 ㅎㅎㅎㅎ 네 -(마이너스)값을 넣어주면 됩니다.

저는 하나씩 줄이고 싶기 때문에 -1을 by의 파라미터로 주면 되겠네요.



그럼 한번 해보겠습니다.

우리는 input을 받아야 하기 때문에.. 위에서 했던것 처럼



import Foundation

var input = readLine()!

for i in stride(from: Int(input)! , to: 1, by: -1)

{

 print(i)

 }


자 한번 해볼까요? 


ㅇ?







왜 2까지 밖에 안나오지....

위에서 말한 reversed()도, 일반적인 앞에서 하는 for문도 둘다




1부터였는데요..


그냥 똑같이 from -  사용자가 입력한 수 ~ to - 1까지 한건데..

왜 stride는 2까지 밖에 안나왔을까요? 





그 이유는...딱히 없고 그냥 그렇게 만들어졌기때문이죠 ^^....




ㅎㅎ 위 영어를 간단하게 해석해보자면,  stride(from:to:by:)는 to파라미터에 있는 수를 제외하고 카운트합니다.

만약 to파라미터에 있는 수를 포함시키고 싶다면 stride(from:through:by:)를 사용하세요 :)


라고 하네요!!!

우리는 stride(from : 사용자가 입력 한 수 to : 1 by : -1)로 했으니 1이 포함되지 않고 5,4,3,2까지만 나오는건 맞는 결과네요 ㅎㅎ


그럼 위에서 얘기해준대로 1까지 나오게 한번해봅시다. 



짠~~

어때요 잘 나오죠?





P.S. 

저는 이걸보고 '영어'의 문법상 범위를 나타낼 때 to는 미포함이고, through는 포함인가? 라는 궁금증이 들어서 엄청 찾아봤어요. 먼저 to를 찾아봤는데 뭐를 미포함한다 이런 건 찾을 수 없었고,

 through는 


이런 뜻을 찾을 수 있었어요.

근데 보통 from 1 to 10하면 1부터 10까지를 나타내잖아요??보통?????????

그래서 막 영어 오픈채팅방 들어가서 막 물어보고 그랬는데 다들 to는 포함인것 아니냐고 그러셨어요...이건 네이티브도 모를듯 막 이러시면서 XD..

물어물어본 결과



이런..결론을 냈습니다.





아무튼!!!우리는 오늘 역순으로 for문을 도는법에 대해 알아보았는데요, stride함수같은경우에는 역순이 아닌 일반적인 경우에도 쓸 수 있겠죠? 대신 to, through를 주의해서 써주면 좋을 것 같네요 ㅎㅎ


예에~~


반응형