TIL

240724 TIL

마라탕천재 ㅣ 2024. 7. 24. 18:34

오늘부터 문제를 파이썬이 아닌, 자바로 풀기로 했다.

👉 문제 보러 가기

 

프로그래머스

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

programmers.co.kr

 

1. 처음에 짠 코드 (틀린 코드)

class Solution {
    // n: 구역의 길이, m: 롤러의 길이, section: 덧칠해야 할 구역
    public int solution(int n, int m, int[] section) {
        int tmp = section[section.length - 1] - section[0] + 1; // 마지막 칸도 추가해야하므로 1 더함
        return (tmp + m - 1) / m; // 이 부분이 핵심
    }
}

로직은 이러하다.

  • 문제 인식: 정수 나눗셈에서 나머지가 있을 때 결과를 올림하고 싶다.
  • 기본 아이디어: 만약 나누어 떨어지지 않는다면, 결과에 1을 더해야 한다.
  • 수학적 접근: a를 b로 나눌 때, (a + b - 1) / b 를 계산하면:
    • 나누어 떨어질 경우: 그대로 a/b가 된다.
    • 나누어 떨어지지 않을 경우: 결과가 1 올라간다.
  • 검증: 예를 들어, 10을 3으로 나누는 경우:
    • 일반 나눗셈: 10 / 3 = 3 (정수 나눗셈)
    • 이 공식 사용: (10 + 3 - 1) / 3 = 12 / 3 = 4
  • 이해:
    • (b - 1)을 더하는 것은 나머지가 있을 때 결과를 1 증가시키는 효과가 있다.
    • 나누어 떨어질 때는 영향을 주지 않는다.

 

그러나 테스트케이스의 반정도는 맞고 반정도는 틀렸다. 

그 이유는, 이 방법은 section[0]부터 section[section.length - 1]까지 모든 구역이 연속적으로 칠해져야 한다고 가정하기 때문이다.

 

2. 두번째로 짠 코드(맞은 코드)

class Solution {
    //n:구역의 길이, m:롤러의 길이, section: 덧칠횟수
    public int solution(int n, int m, int[] section) {
        int paint = 0; // 덧칠 횟수
        int painted = 0; // 마지막으로 칠한 타일

        for (int s : section) {
            if(s > painted) {
                paint++;
                painted = s + m;
            }
        }
        return paint;
    }
}

 

꽤 간단한 문제였는데, 어렵게 생각한 것 같다.

 

3. 팀 프로젝트 코드리뷰

https://yeseo.site/19

 

팀 소개 페이지 코드리뷰

👉오늘 리뷰한 코드 보러가기 ourTeamPage/personalPage.html at develop · Sparta-IEEE/ourTeamPageTeam introduction web page. Contribute to Sparta-IEEE/ourTeamPage development by creating an account on GitHub.github.com 1. 스크립트의 위

yeseo.site

지난주에 진행했던 프로젝트의 코드리뷰 시간을 가졌다.

열의 넘치는 팀원들을 만나서 팀이 바뀌었음에도 불구하고 끝까지 하는 모습이 멋졌다.

리뷰 과정에서 여러 의견과 제안을 나누었고, 팀원들은 많은 것을 배웠다며 긍정적인 피드백을 주었다.

사실 제 눈에는 모든 팀원들의 코드가 훌륭해 보였습니다(LGTM: Looks Good To Me 👍) 우하하