2018 KAKAO BLIND RECRUITMENT_비밀 지도
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
요지
이 문제의 요지는
- ‘겹치다’의 뜻을 이해하기
- 1의 결론을 바탕으로
arr1
,arr2
처리하기- 각 지도(
vector
)의 원소의 이진 값을 배열처럼 접근하는 방법 - 1의 방법을 이용해
answer
만들기
- 각 지도(
이다.
해결
요지 1
출력은 arr1
의 어느 한 원소와 arr2
의 같은 위치의 값을 ‘겹쳐’ 만들어진 answer
를 반환하면 된다.
‘겹치다’ 라는 단어는 문제의 설명 2번에 나온다. 설명에 따르면 지도 1(또는 arr1
), 지도 2(또는 arr2
)중 어느 하나라도 벽(또는 1)인 부분은 전체 지도(또는 answer
)에서도 벽이고, 지도 1, 2 에서 모두 공백인 부분은 전체 지도에서도 공백(또는 0)이 된다고 한다.
arr1 |
arr2 |
answer |
---|---|---|
1 | 0 | 1 |
0 | 0 | 0 |
따라서 ‘겹치다’의 뜻은 OR 연산임을 알 수 있다.
요지 2 의 1
예를 들어 십진수 9는 이진수로 01001이다. 이를 배열처럼 접근하는 방법은 1과 각 자릿수를 &(AND
)연산하면 된다. 연산 방법은 다음과 같다:
9 & (1 << i) // i 는 각 자릿수를 의미한다
요지 2 의 2
answer
는 string
으로 이루어진 1차원 vector
이므로 arr1[i]
와 arr2[i]
의 이진 값의 자릿수를 OR 연산한 결과를 answer[i]
에 덧붙이면 된다. 따라서 코드는 다음과 같다:
for(i = 0; i < n; i++) {
string temp = "";
for(j = n - 1; j >= 0; j--) {
operand = (1 << j);
temp += arr1[i] & operand || arr2[i] & operand ? '#' : ' ';
}
answer.push_back(temp);
}
이 글에 잘못된 내용이 있을 경우 알려주시기 바랍니다.
Leave a comment