TIL/알고리즘 공부

백준 10171, 10172번 Swift 알고리즘 연습

여의도사노비 2022. 3. 15. 19:02
728x90

오늘은 10171, 10172 문제를 풀어보았다.

10171번 문제. 누가 만들었는지 포인트를 기가막히게 뽑았다.. ㅋㅋㅋㅋ

이런 문제를 직면했을때 나같은 코딩 초보는 아마 아래와 같은 시도를 가장 먼저 했으리라 믿는다...

 

print("\    /\")
print(" )  ( ')")
print("(  /  )")
print(" \(__)|")

 

처음엔 너무 간단하다는 생각에 플레이그라운드에 돌려보지도 않고 그냥 백준 콘솔에 바로 코딩하였다. 그런데..!

두 번이나 틀림 ㅎ

오늘도 나의 예상을 비웃듯 한 번만에 알고리즘 테스트를 통과하지 못했다.. 뭐가 문제인지 플레이그라운드를 열고 진행해보았다.

"escape sequence" 요게 요게 중요~

그러자 위와 같은 오류가 발생하였고 "escape sequence" 이게 무엇인지 몰라 찾아보았다.

 

이스케이프 시퀀스

위키백과, 우리 모두의 백과사전.

이스케이프 시퀀스(escape sequence) 또는 확장열 컴퓨터와 주변 기기의 상태를 바꾸는 데에 쓰이는 일련의 문자열이다. 제어 시퀀스(control sequence)라고도 한다. 일부 제어 시퀀스는 늘 같은 의미를 지니고 있는 특수 문자이다. 이스케이프 시퀀스는 이스케이프 문자를 이용하여 이를 따르는 문자들의 뜻을 바꿀 수 있는데, 여기서 문자들은 데이터가 아닌 실행 명령어로 해석할 수 있다.

(출처 : 위키트리)

 

한마디로 그냥 \ + α 로 정의되어 있는 명령어가 있다는 말이라고 보면 될 것 같다. 그래서 우리가 "\"만을 사용했을 때 부적합한(invalid) 이스케이프 시퀀스를 썼다고 에러 창이 뜨는 것이다.

 

이스케이프 시퀀스의 종류는 다양한데 \a, \b, \() 등 다양하게 정의되어 있으니 궁금한 분은 직접 검색해보시기 바란다.

 

이제 오류의 내용을 대강 파악했으니 이를 해결할 수 있는 방법을 생각해보자.

 

우리는 "\"가 단순히 문자로서 읽히기를 바라고 print문을 작성했을 것이다. 그렇다면 이를 어떻게 단순 문자로 처리해주는가?

 

이에 대한 답은 바로 역슬래시("\")를 한 번 더 입력해주는 것이다.

 

print("\\    /\\")
print(" )  ( ')")
print("(  /  )")

print(" \\(__)|")

고양이 완성..!!

 

+)

이렇게 백슬래쉬를 이용하여 출력해줄 수도 있는데 다른 방법도 있기에 추가해보겠다.

 

바로 샵(#)과 따옴표("")를 이용하여 출력하는 방식이다.

 

let cat = #"""
\    /\
 )  ( ')
(  /  )
 \(__)|
"""#
print(cat)

 

따옴표는 여러줄의 문자열을 String으로 변환할 때 사용된다고 한다.

 

두 번째 방식이 훨씬 간단하여 10172번 문제를 풀때도 같은 방식을 적용하여 보았다!

 

let dog = #"""

|\_/|
|q p|   /}
( 0 )"""\
|"^"`    |
||_/=\\__|

"""#

print(dog)

 

(위와 같이 dog의 그림은 상당히 난해하기 때문에 예제 답안을 긁어다가 쓰는 것을 추천한다..!)

오늘도 보람찬 하루~

이렇게 하여 10171, 10172번 문제를 해결할 수 있었다.

 

 

정리(Today I Learned)

  1. Invalid escape sequence 오류가 뜰 경우 백슬래쉬("\")를 기억할 것!
  2. 이스케이프 시퀀스 종류가 다양하여 "\()", "\n" 등의 용어는 정리해놓고 기억해둘 것!
  3. 직접 하나하나 그리는 것을 탈피하여 더 쉬운 방법이 항상 존재함을 염두해두자