시뮬레이션

jung_ho9 개발일지·2023년 2월 7일
0

자료구조/알고리즘

목록 보기
12/13
post-thumbnail

시뮬레이션은 모든 과정과 조건이 제시되어, 그 과정을 거친 결과가 무엇인지 확인하는 유형이다. 보통 문제에서 설명해 준 로직 그대로 코드로 작성하면 되어서 문제 해결을 떠올리는 것 자체는 쉬울 수 있으나 길고 자세하여 코드로 옮기는 작업이 까다로울 수 있다.

시뮬레이션 예시


시뮬레이션에 관련된 예시를 하나 살펴보겠습니다.

무엇을 위한 조직인지는 모르겠지만, 비밀스러운 비밀 조직 '시크릿 에이전시'는 소통의 흔적을 남기지 않기 위해 3 일에 한 번씩 사라지는 메신저 앱을 사용했다. 그러나 내부 스파이의 대화 유출로 인해 대화를 할 때 조건을 여러 개 붙이기로 했다.

해당 조건은 아래와 같다.

  • 캐릭터는 아이디, 닉네임, 소속이 영문으로 담긴 배열로 구분한다.
  • 소속은 'true', 'false', 'null' 중 하나다.
  • 소속이 셋 중 하나가 아니라면 아이디, 닉네임, 소속, 대화 내용의 문자열을 전부 X로 바꾼다.
  • 아이디와 닉네임은, 길이를 2진수로 바꾼 뒤, 바뀐 숫자를 더한다.
  • 캐릭터와 대화 내용을 구분할 땐 공백 : 공백으로 구분합니다: ['Blue', 'Green', 'null'] : hello.
  • 띄어쓰기 포함, 대화 내용이 10 글자가 넘을 때, 내용에 .,-+ 이 있다면 삭제한다.
  • 띄어쓰기 포함, 대화 내용이 10 글자가 넘지 않을 때, 내용에 .,-+@#$%^&*?! 이 있다면 삭제한다.
  • 띄어쓰기를 기준으로 문자열을 반전한다: 'abc' -> 'cba'
  • 띄어쓰기를 기준으로 소문자와 대문자를 반전한다: 'Abc' -> 'aBC'

시크릿 에이전시의 바뀌기 전 대화를 받아, 해당 조건들을 전부 수렴하여 수정한 대화를 객체에 키와 값으로 담아 반환해라. 같은 캐릭터가 두 번 말했다면, 공백을 한 칸 둔 채로 대화 내용에 추가되어야 한다. 대화는 문자열로 제공되며, 하이픈- 으로 구분된다. 문자열은 전부 싱글 쿼터로 제공되며, 전체를 감싸는 문자열은 더블 쿼터로 제공된다.

예: "['Blue', 'Green', 'null'] : 'hello. im G.' - ['Black', 'red', 'true']: '? what? who are you?'"

예시를 이용하여 순차적으로 작성하면, 다음과 간다.

  1. "['Blue', 'Green', 'null'] : 'hello. im G.' - ['Black', 'red', 'true']: '? what? who are you?'" 입력값으로 받은 문자열을 각 캐릭터와 대화에 맞게 문자열로 파싱을 하고, 파싱한 문자열을 상대로 캐릭터와 대화를 구분한다.
    • 첫 번째 파싱은 - 을 기준으로 ['Blue', 'Green', 'null'] : 'hello. im G.', ['Black', 'red', 'true']: '? what? who are you?' 두 부분으로 나눈다.
    • 두 번째 파싱은 : 을 기준으로 \['Blue', 'Green', 'null'\] 배열과 'hello. im G.' 문자열로 나눈다.
  2. 배열과 문자열을 사용해, 조건에 맞게 변형한다.
    • 소속이 셋 중 하나인지 판별한다.
    • ['Blue', 'Green', 'null'] 아이디와 닉네임의 길이를 2진수로 바꾼 뒤, 숫자를 더한다: [1, 2, 'null']
    • 'hello. im G.' 10 글자가 넘기 때문에, .,-+@#$%^&* 를 삭제한다: 'hello im G'
    • 'hello im G' 띄어쓰기를 기준으로 문자열을 반전한다: 'olleh mi G'
    • 'olleh mi G' 소문자와 대문자를 반전한다: 'OLLEH MI g'
  3. 변형한 배열과 문자열을 키와 값으로 받아 객체에 넣는다.
    • { "[1, 2, 'null']": 'OLLEH MI g' }

이렇듯, 문제에 대한 이해를 바탕으로 제시하는 조건을 하나도 빠짐없이 처리해야 정답을 받을 수 있다. 하나라도 놓친다면 통과할 수 없게 되고, 길어진 코드 때문에 헷갈릴 수도 있으니 주의해야 한다.

profile
꾸준하게 기록하기

0개의 댓글

관련 채용 정보