시뮬레이션은 모든 과정과 조건이 제시되어, 그 과정을 거친 결과가 무엇인지 확인하는 유형이다. 보통 문제에서 설명해 준 로직 그대로 코드로 작성하면 되어서 문제 해결을 떠올리는 것 자체는 쉬울 수 있으나 길고 자세하여 코드로 옮기는 작업이 까다로울 수 있다.
시뮬레이션에 관련된 예시를 하나 살펴보겠습니다.
무엇을 위한 조직인지는 모르겠지만, 비밀스러운 비밀 조직 '시크릿 에이전시'는 소통의 흔적을 남기지 않기 위해 3 일에 한 번씩 사라지는 메신저 앱을 사용했다. 그러나 내부 스파이의 대화 유출로 인해 대화를 할 때 조건을 여러 개 붙이기로 했다.
해당 조건은 아래와 같다.
시크릿 에이전시의 바뀌기 전 대화를 받아, 해당 조건들을 전부 수렴하여 수정한 대화를 객체에 키와 값으로 담아 반환해라. 같은 캐릭터가 두 번 말했다면, 공백을 한 칸 둔 채로 대화 내용에 추가되어야 한다. 대화는 문자열로 제공되며, 하이픈- 으로 구분된다. 문자열은 전부 싱글 쿼터로 제공되며, 전체를 감싸는 문자열은 더블 쿼터로 제공된다.
예: "['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.'
, ['Black', 'red', 'true']: '? what? who are you?'
두 부분으로 나눈다.:
을 기준으로 \['Blue', 'Green', 'null'\]
배열과 'hello. im G.'
문자열로 나눈다.['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'
{ "[1, 2, 'null']": 'OLLEH MI g' }
이렇듯, 문제에 대한 이해를 바탕으로 제시하는 조건을 하나도 빠짐없이 처리해야 정답을 받을 수 있다. 하나라도 놓친다면 통과할 수 없게 되고, 길어진 코드 때문에 헷갈릴 수도 있으니 주의해야 한다.