제가 오늘 코드 카타를 못 푼 이유는 제 잘못은 아닌 거 같습니다.
오늘의 코드 카타는 2개 이하로 다른 비트입니다.
주어진 x보다 크고, 2진수로 했을 때, 비트가 1~2개 다른 수 중 가장 작은 수를 반환해야 합니다.
값을 구하기 위해 제가 먼저 생각한 방법은 2진수로 바꾸고 직접 더하는 식이었습니다.
class Solution {
fun solution(numbers: LongArray): LongArray {
var answer: LongArray = LongArray(numbers.size) { 0 }
for(i in numbers.indices) {
var n = numbers[i]
val binI = n.toString(2)
while(true) {
val binNext = (++n).toString(2)
var count = 0
val diff = binNext.length - binI.length
if(diff > 0) count += diff
for(j in (binI.length - 1) downTo 0) {
if(binI[j] != binNext[j+diff]) count++
if(count > 2) {
break
}
}
if(count < 3) {
answer[i] = binNext.toLong(2)
break
}
}
}
return answer
}
}
당연히 이를 방지하기 위해 엄청 큰 값의 테스트 케이스가 설정돼 있었습니다.
그렇기에 특정 규칙을 찾아보려 했지만, 찾지 못했고, 그나마 찾은 열쇠는 비트 연산을 써 보면 될 것 같다는 것이었습니다.
물론 어떤 연산자로 해결할지는 아직 고민해봐야 할 것 같습니다.
이번 프로젝트 주제는 게임 SNS입니다. 저는 그 중에 마이페이지를 담당하게 됐습니다.
오늘은 해당 부분의 레이아웃을 짜고, 팀 회의를 진행하면서 하루를 보냈습니다.
아마 이거 다 쓰고도 더 해야 할 거 같네요.
오늘 공부했던 내용은 Adapter입니다.
Adapter는 ListView, GridView 같은 여러 요소들이 필요한 곳에 쓰일 수 있습니다.
class MyPageGridAdapter(private val context: Context): BaseAdapter() {
private val gridItems: ArrayList<MyPageGridViewItem> = arrayListOf()
companion object {
var next = 0
}
fun addItem(item: MyPageGridViewItem) {
addEmptyItem(gridItems.size)
setItem(item, next++)
}
private fun addEmptyItem(size: Int) {
repeat(3 - (size % 3)) {
gridItems.add(MyPageGridViewItem(R.drawable.mypage_test_image2, ""))
}
}
private fun setItem(item: MyPageGridViewItem, size: Int) {
gridItems[size] = item
Log.d("setItem", size.toString())
}
override fun getCount(): Int = gridItems.size
override fun getItem(position: Int): Any = gridItems[position]
override fun getItemId(position: Int): Long = position.toLong()
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val layout = FrameLayout.inflate(context, R.layout.layout_my_page_gridview_item, null)
val imageView = layout.findViewById<ImageView>(R.id.iv_mypage_gv_item)
imageView.setImageResource(gridItems[position].image)
val textView = layout.findViewById<TextView>(R.id.tv_mypage_gv_item)
textView.text = gridItems[position].more
return layout
}
}
저는 위처럼 코드를 작성해주었습니다.
먼저, 어떤 정보가 바뀌면서 GridView를 채울지 골라야 하기에,
이를 data class인 MyPageGridViewItem으로 만들고, ArrayList에 집어넣어줬습니다.
그리고 이를 Adapter의 구현해줘야 할 함수인 getCount(), getItem(), getItemId, getView에 적용했습니다.
그리고 현재는 GridView가 Scroll을 갖고 있기 때문에, 생기는 문제를 해결하고 있습니다.
해결 방법으로는 다른 방법을 모색하거나, GridView가 Scroll하지 못하고 전부 표현하게끔 하는 방법이 있겠습니다.
오늘은 이 정도만 적고 가겠습니다.
내일은 기능까지 다 적용하고, 모레는 추가 기능까지 넣어보는 게 목표입니다.
그리고 못 푼 코드 카타들은 이번 주 주말에 알고리즘을 공부하면서 풀 것 같네요.
끝.