Developing Myself Everyday
article thumbnail
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

사진: Unsplash Markus Spiske

 

 

1. 문제 설명

양의 정수 x에 대한 함수 f(x)를 다음과 같이 정의합니다.

  • x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수

예를 들어,

  • f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다.

  • f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다.

 

정수들이 담긴 배열 numbers가 매개변수로 주어집니다. numbers의 모든 수들에 대하여 각 수의 f 값을 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.


 

2. 나의 풀이

이 문제는 특별한 알고리즘이 필요하지 않는 문제입니다.

 

숫자가 짝수일 때에는 2진법으로 변환했을 때 0이 가장 오른쪽에 오게 됩니다. 이때에는 현재 숫자에서 + 1만 해주면 원하는 값을 얻을 수 있습니다.

 

숫자가 홀수일 때에는 가장 오른쪽부터 0을 찾고 해당 위치와 바로 오른쪽 1의 값을 바꾸면 됩니다. 이를 진행하는 코드는 아래와 같습니다.

<kotlin />
class Solution { fun solution(numbers: LongArray): LongArray { return numbers.map { if (it % 2 == 0L) { it + 1 } else { val binary = it.toString(2).reversed() + "0" val index = binary.indexOf('0') val modifiedBinary = binary.substring(0, index - 1) + "01" + binary.substring(index + 1) modifiedBinary.reversed().toLong(2) } }.toLongArray() } }
profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!