티스토리 뷰
이전 공부
2020/11/30 - [코딩 공부] - 플레이그라운드 스위프트로 코딩 공부하기 5. 논리 연산자
이제 while 루프를 배울 차례가 되었습니다.
지금까지 앱 이름이 플레이그라운드 스위프트인 줄 알았는데 스위프트 플레이그라운드가 정확한 명칭이었네요...ㅋㅋ
약 5개의 포스트는 플레이그라운드 스위프트라고 씀;ㅋㅋㅋ
첫 번째는 일직선으로 있는 스위치들을 켜는 것인데 토글스위치와 무브포워드가 반복되서 사용되는 패턴입니다.
반복되는 패턴은 일일이 코드를 칠 필요 없이 while문을 사용해서 특정한 조건 동안 반복시켜 주면 간단하게 해결할 수 있습니다.
물론 코드가 계속해서 참이면 끝없이 실행되기 때문에 끝내고 싶은 시점에서 거짓이 되게 코드를 짜야 합니다.
처음 while문을 봤을 땐 참 어려웠는데 이번 파트를 하면서 완전 이해했습니다.
두 번째는 상태가 섞여있는 스위치들 중에서 꺼져있는 스위치만 골라서 켜기.
이것 역시 타일의 상태를 확인하고 행동을 수행하는 코드를 짠 후 마지막 칸에 도달해서 앞이 막히면(isBlocked) 반복을 멈추도록 !isBlocked를 while문의 조건으로 넣었습니다.
세 번째는 계단식으로 이동하며 보석을 수집하기입니다.
계단식으로 이동하며 보석을 수집하는 turnAndCollectGem() 함수를 만든 후 while문으로 반복해주었습니다.
네 번째는 포털을 타고 이동해서 스위치를 켜기입니다.
시작점과 스위치들 간 거리가 세 칸씩이어서 앞이 막혀있지 않은 동안 먼저 세 칸을 전진하고 스위치의 상태에 따라 행동을 하도록 if문을 사용했습니다.
그리고 코너에서는 오른쪽으로 돌도록 OR 연산자를 사용해서 조건을 만들어 주었습니다.
마지막 스위치를 켜고 앞이 막히면서(isBlocked) 반복이 끝나고 성공!
다섯 번째는 벽을 타고 둘러있는 보석들을 수집하기.
이거도 조금 고민했던 흔적이 보이는데...ㅋㅋㅋ
while문을 쓸 만한 조건을 생각해내지 못해서 for문으로 풀었습니다.
혹시 while문 조건을 아시는 분 계시면 댓글... 달아주세요... ㅠㅠ
여섯 번째는 스위치를 켜고 보석도 수집하기입니다.
먼저 if문을 써서 타일의 상태를 확인하고 보석을 수집하거나 스위치를 켜게 한 다음 끝에서 돌아서 한 줄씩 처리하게끔 AND 연산자로 앞과 옆이 막혔을 때의 행동을 지정해 주었습니다.
그리고 마지막 타일에서 앞이 막혔을 때 반복이 멈추도록 !isBlocked 를 while문의 조건으로 넣었습니다.
일곱 번째는 소용돌이 모양으로 배치되어 있는 보석들을 수집하기입니다.
이건 처음 나오는 유형이라 힌트가 있어서 쉽게 풀었습니다.
외부 루프의 조건을 앞이 막히지 않았을 때로 지정한 다음 내부 루프는 보석이 있지 않을 때로 지정하고 앞으로 전진하게, 그리고 내부 루프가 거짓이 되어서 종료되면 보석을 수집하고 왼쪽으로 돌 수 있도록 외부 루프에 행동들을 추가했습니다.
사실 이 때 까지도 힌트를 거의 떠 먹여줘서 작동 원리를 완벽하게 이해하진 못한 상태로 진행했었습니다. 그리고 다음 스테이지에서 머리에 쥐가 남...ㅋ
여덟 번째는 길을 따라 빙글빙글 돌아서 맨 끝에 있는 스위치에 도달하는 것인데 길의 길이가 매번 바껴서 무브포워드 반복 입력으로는 풀 수 없는 문제입니다. for 루프 또한 마찬가지...
어찌어찌해서 스위치까지 가게는 만들었는데 토글스위치 조건을 넣어놔도 밟지를 않고 자꾸 되돌아 나와서 꽤 고민했던 기억이 납니다. while 루프의 수행순서가 정확하게 이해되지 않아서 앞 스테이지도 몇 번 가서 실행 순서를 보고... 한참 머리를 싸매다가 해결했습니다.
while 루프의 조건은 오픈 스위치에 올라가면 종료되는 것으로 하고 타일의 상태를 확인하고 행동을 수행하는 조건을 만든 후 일치하는 조건이 없으면 앞으로 이동하는 식으로 코드를 짰네요.
지금까지 스위프트 플레이그라운드를 하며 처음으로 멘붕에 빠트렸던 문제 ㅋㅋㅋ 물론 이건 시작일 뿐이었습니다...
아홉 번째는 스위치들을 켜고 마지막에 보석을 수집하는 것인데 스위치의 상태가 매번 바뀝니다.
타일의 상태를 확인하고 전진하는 조건까진 만들었는데 외부 루프의 적절한 조건을 생각해내지 못해서 for 루프로 풀었습니다. 지금 보니까 스위치 토글이랑 콜렉스 젬에 쭉 else if 썼으면 되는 거 같은데 왜 while을 썼는지 모르겠지만... 초보 시절의 과도기 코딩..... 오늘은 지쳐서 더 생각하고 싶지 않네요...^^;;
이것보다 더 좋은 코딩이 분명히 있을텐데 지나가다 제 글을 보시는 고수님들은 댓글 달아주시면 감사하겠습니다...ㅎㅎ
아직 접지 않고 이어지는 다음 공부
2020/12/01 - [코딩 공부] - 아이패드 앱 스위프트 플레이그라운드와 코딩 공부하기 7. 알고리즘
'코딩 공부' 카테고리의 다른 글
아이패드 앱 스위프트 플레이그라운드로 코딩 공부하기 8. 변수 (0) | 2020.12.02 |
---|---|
아이패드 앱 스위프트 플레이그라운드와 코딩 공부하기 7. 알고리즘 (0) | 2020.12.01 |
플레이그라운드 스위프트로 코딩 공부하기 5. 논리 연산자 (0) | 2020.11.30 |
아이패드 앱 플레이그라운드 스위프트로 코딩 공부하기 4. 조건 코드 (0) | 2020.11.30 |
아이패드 앱 플레이그라운드 스위프트(Playgrounds Swift)로 코딩 공부하기 3. for 루프 (0) | 2020.11.30 |
- Total
- Today
- Yesterday
- 프로그래밍
- 컴퓨터사이언스
- 다이나믹프로그래밍
- 스위프트플레이그라운드
- 아이패드
- 해커랭크
- c언어
- 백준
- BFS
- 깊이우선탐색
- 그리디
- 컴퓨터
- 문제풀이
- DFS
- 영어공부
- 캐나다생활
- 너비우선탐색
- 컴퓨터공부
- 기초
- hackerrank
- C언어기초
- c++
- 애플
- 알고리즘
- 프로그래머스
- dp
- 하드웨어
- 코딩공부
- 캐나다
- greedy
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |