클래스 파일들을 다 만들어놓고 나중에 패키지에 그냥 집어 넣었다. 그랬더니 클래스 끼리 Import 해줄 때 경로가 맞음에도 Unresolved Reference 에러가 뜨면서 실행이 안되었다...

 

도대체 무엇이 문제인가 도저히 모르겠어서 튜터님께 찾아가 여쭈어보았다.

 

빌드에서 프로젝트를 clear하고 다시 make 해보라는 말씀대로 해보았더니 정상작동되었다!!

 

 

 

다른 분들의 기술 블로그를 보니 다른 프로젝트들끼리 꼬였을 때, 혹은 IDE 문제로 종종 이런 경우가 생기면 빌드에서 clean 해주고 다시 Rebuild해주거나 새로 Make해준다고 한다.

 

다음에 이런 비스무리한 에러가 생겼을 때 이 방법을 써야겠다.

 

방법을 가르쳐주신 정용현 튜터님께 감사의 말씀 올립니다!!

https://school.programmers.co.kr/learn/courses/30/lessons/136798

 

프로그래머스

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

programmers.co.kr

class Solution {
    fun solution(number: Int, limit: Int, power: Int): Int {
        var answer: Int = 0
        var factorList = arrayListOf<Int>()
        var count = 0
        for(i in 1..number){
            for(j in 1..i){
                if(i % j ==0){
                    count++
                }
            }
            factorList += count
            count = 0
        }
        factorList.map {
            if(it > limit){
                answer += power
            }
            else answer += it
        }
        return answer
    }
}

 

로직은 간단해서 그냥 바로바로 쳤더니 역시 생각없이 친 코드는 시간초과다,,ㅎㅎ

 

 

약수를 구하는 과정을 좀 단순하게 해야할 것 같다. 

import kotlin.math.sqrt
class Solution {
    fun solution(number: Int, limit: Int, power: Int): Int {
        var answer: Int = 0
        var count = 0
        for(i in 1..number){
            var sqrtNum = sqrt(i.toDouble()).toInt()
            var count = 0
            for(j in 1..sqrtNum){
                if(i%j==0){
                    if (i / j == j) count += 1
                    if (i / j != j) count += 2
                }
            }
            if(count>limit) answer+=power
            else answer+=count
        }
        return answer
    }
}

 

약수를 구하는 방법을 찾아보니 제곱근을 통해서 시간복잡도를 조금 해결해줄 수 있는 방법을 찾았다.

만약 100의 약수를 찾는다면 100의 제곱근인 10까지의 약수[1,2,5,10]를 구한 후 100을 10까지의 약수로 나눠진 값을 합치고 중복된 숫자를 Set나 다른 방법으로 제거하고 count해주면 된다.

 

하지만 나는 조금 더 간결하게 해봤다. 결국에 1을 제외하고 나머지 약수에서 결국엔 2개씩의 카운트가 나오기에 위의 코드처럼 짰다.

 

통과!

https://school.programmers.co.kr/learn/courses/30/lessons/161989#

 

프로그래머스

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

programmers.co.kr

 

 

class Solution {
    fun solution(n: Int, m: Int, section: IntArray): Int {
        var answer: Int = 0
        var max = 0
        if(m == 1) {
            answer = section.size
        }
        else {
            for(i in 0 until section.size){
                if(section[i] < max){
                    continue
                }
                answer++
                max = section[i] + m
            }
        }
        return answer
    }
}

 

처음에 answer 값에 1을 먼저두고 max에 m값을 넣어놓고 풀었다.

예시 테스트는 통과했으나 채점테스트에서 4개의 반례가 나왔다. 찾아봐도 반례를 못찾아 조원분께 도움을 요청드렸다.

 

알고보니 같은 문제에서 테스트 값 5, 2, [1,2,5] 로 꽤나 고생을 하셨다고 하셨다. 한번 테스트값으로 추가해보라는 말씀대로 추가해서 보니 정말 내 코드의 반례가 되는 예시였다. 천천히 코드에 넣어서 분석해보니 for문안에 if문에서 section[i]값과 max값이 같을 때 일어나는 문제였다. 

 

answer 초기값 0 max도 초기값 0 으로 실행하면 정말 쉽게 풀어지는 문제였다.

 

도움을 요청하고 함께 문제점을 논의하는 과정이 정말 중요하다는 이야기를 들을 때면  "그래 그렇지" 라는 생각만 들었다. 하지만 사실 실제로 그렇게 하는 것은 보기보다 어려운 문제인 것 같다..

 

살면서 어려움에 봉착했을 때 다른 사람에게 도움을 구해야 겠다는 생각과 행동은 도움을 구해본 경험이 중요한 것 같다.

 

도움을 요청하려는 생각이 나의 약점을 노출시키고 초라하게 만들 것이라고 느껴왔던건지 나는 살면서 도움을 많이 요청한 경험이 많이 없었다. (<- 이런 사람 특: 알게모르게 도움 많이 받음,,ㅎㅎ)

 

하지만 내일배움캠프를 하면서 정말 적극적으로 모르는 것에 있어서 팀원들 그리고 튜터분들께 질문하고 도움을 요청하면서 느낀 점은 도움을 요청하는 것이 내 생각과 다르게 나를 더 빠르게 성장시키고 발전시키고 있다는 것이다.

 

도움을 요청하기 전에 내가 어떤 부분에서 어려움을 느끼고 있는지 정확히 인지하고 있어야 하는 부분에서 스스로 배우는 것도 많았고 모르는 부분에 대한 답변을 받을 때 모르는 부분을 포함한 그 외 것들에서도 배우는게 있었다.

 

이번에 정말 이건 반례가 없다!!! 프로그래머스 프로그램에서 문제점을 발견했다!!! 라고 생각했던 나를 다시 되돌아보게 된 문제였다.

3조 경식님께 감사의 말씀 올립니다ㅎㅎ

https://school.programmers.co.kr/learn/courses/30/lessons/12977

 

프로그래머스

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

programmers.co.kr

 

 

class Solution {
    fun solution(nums: IntArray): Int {
        var answer = 0
        var sumList = mutableListOf<Int>()
        for(i in 0 until nums.size-2) {
            for(j in i+1 until nums.size-1) {
                for(k in j+1 until nums.size)
                sumList += nums[i] + nums[j] + nums[k]
            }
        }
        for(number in sumList){
            var count = 0
            for(i in 1..number){
                if(number % i == 0){
                    count++
                }
            }
            if(count == 2){
                answer += 1
            }
        }
        return answer
    }
}

 

그냥 자동적으로 거의 쳐진 코드다.. 그만큼 정말 단순하게 써내려간 코드

 

몇몇개의 테스트 빼고는 시간도 괜찮게 나온거 같긴하지만 알고리즘을 공부해서 적용시키면 얼마나 더 빠를지 궁금하다.

개인 프로젝트를 끝내고 시간이 남으면 얼른 공부해보고 글을 작성하고 싶다.

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

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

programmers.co.kr

 

class Solution {
    fun solution(answers: IntArray): IntArray {
        var answer = intArrayOf()
        val numArr = arrayOf(intArrayOf(1,2,3,4,5),intArrayOf(2,1,2,3,2,4,2,5),intArrayOf(3,3,1,1,2,2,4,4,5,5))
        val score = IntArray(3)

        for (i in 0 until answers.size) {
            if(numArr[0][i]==answers[i%5] ) {
                score[0]++
            }
            if(numArr[1][i]==answers[i%8] ) {
                score[1]++
            }
            if(numArr[2][i]==answers[i%10] ) {
                score[2]++
            }
        }
        if(score[0] == score[1] && score[1] == score[2]) {
            answer = intArrayOf(1,2,3)
        } else {
            var temp = arrayListOf<Int>()
            val maxScore = maxOf(score[0], maxOf(score[1], score[2]))
            if (maxScore == score[0]) temp.add(1)
            if (maxScore == score[1]) temp.add(2)
            if (maxScore == score[2]) temp.add(3)
            answer = temp.toIntArray()
        }
        return answer
    }
}

 

앞선 테스트 1,2는 통과했지만 무식하게 이런식으로 짜니 제출한 결과는,, 런타임 에러 잔뜩

좀 더 단순하게 만들어보려 했으나 시간이 너무 많이 투자됐다,, 잘하신 분의 코드를 보자.

class Solution {
    fun solution(answers: IntArray): IntArray {
        val userAnswers = arrayOf(
            intArrayOf(1,2,3,4,5), intArrayOf(2,1,2,3,2,4,2,5), intArrayOf(3,3,1,1,2,2,4,4,5,5))
        val cnt = IntArray(3)
        val answer = mutableListOf<Int>()
        
        userAnswers.forEachIndexed { i, userAns -> 
            cnt[i] = answers.filterIndexed { j, ans -> ans == userAns[j % userAns.size] }.count()
        }
        cnt.forEachIndexed{ idx, i -> if(cnt.max() == i) answer.add(idx + 1) }
        
        return answer.toIntArray()
    }
}
출처: https://yline.tistory.com/107 [Y_LINE's_Repository:티스토리]

 

나와 비슷하게 배열안에 배열을 넣어 푸셨다. forEach 와 indexed를 잘 활용하여 푸신 것 같다. 

혼자 개발만 하다가 함께 팀 과제로 협업을 해야할 때가 왔다.

 

협업을 하기 위한 세팅을 하면서 배운 점들을 정리해놓아야 다음에 협업을 할 때 참고할 수 있을 것 같아 정리해둔다.

 

1. 우선 팀장이나 리더가 Github repository를 하나 생성해놓는다.

 

2. 안드로이드 스튜디오에서 프로젝트를 생성하고 Git과 연동작업을 한다.

 

3. main branch(배포용) , dev branch(테스트용) 를 하나씩 만들고 자신 개발branch 생성

 

branch 생성 방법

git branch 브랜치명

git switch -c 브랜치명     -> git switch와 git checkout은 브랜치를 이동하는 명령어 -c -b 는 브랜치 생성을 도와줌

git checkout -b 브랜치명

 

생성 후 깃에 add commit & 깃헙에 push origin 브랜치명

 

4. 레포지토리 설정에 가서 Default branch를 dev로 설정

 

 

5. 설정 -> Access에 Collaborators에 가서 People 팀원들 추가하기

 

 

6. git clone을 통해 코드를 받아가고 설정을 맞추면 된다. 

'Git,Github' 카테고리의 다른 글

Git LF will be replaced by CRLF 에러 해결법  (0) 2023.11.30
Git 필수 명령어 모음  (2) 2023.11.22
Git 과 Github 이란?  (2) 2023.11.20

+ Recent posts