[24.07.03] TIL - 024

🎧 0. 오늘의 추천곡

제가 오늘 코드 카타를 못 푼 이유는 제 잘못은 아닌 거 같습니다.

💻 1. 코드 카타

오늘의 코드 카타는 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
    }
}

당연히 이를 방지하기 위해 엄청 큰 값의 테스트 케이스가 설정돼 있었습니다.

그렇기에 특정 규칙을 찾아보려 했지만, 찾지 못했고, 그나마 찾은 열쇠는 비트 연산을 써 보면 될 것 같다는 것이었습니다.

물론 어떤 연산자로 해결할지는 아직 고민해봐야 할 것 같습니다.

🚩 2. 프로젝트 - 게임 SNS

이번 프로젝트 주제는 게임 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하지 못하고 전부 표현하게끔 하는 방법이 있겠습니다.

🎯 3. 끝

오늘은 이 정도만 적고 가겠습니다.

내일은 기능까지 다 적용하고, 모레는 추가 기능까지 넣어보는 게 목표입니다.

그리고 못 푼 코드 카타들은 이번 주 주말에 알고리즘을 공부하면서 풀 것 같네요.

끝.

profile
여기는 공부 기록용 블로그

0개의 댓글