코딩테스트 회고록/코테_Java

[JAVA] 프로그래머스 - k의 개수

iamjisu 2023. 2. 28. 01:02

프로그래머스 코딩테스트 연습 입문단계 'k의 개수' 문제입니다.

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

 

프로그래머스

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

programmers.co.kr


문제 설명

1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.

 

아래 입출력 예시를 참고하세요!


⚠️ 제한사항 및 입출력 예시

  • 1 ≤ i < j ≤ 100,000
  • 0 ≤ k ≤ 9

입출력 예시

 

입력 ( i, j , k )

10   50   5  // i , j , k

출력 (return값)

5

// 10부터 50까지 5는 15, 25, 35, 45, 50 총 5번 등장합니다. 따라서 5를 return 합니다.

✏️ 직접 구현한 코드

class Solution {
    public int solution(int i, int j, int k) {
        int cnt = 0;
        int num;
        for(int n = i; n <= j; n++) {
            num = n;
            if(num==k){
                cnt++;
            }
            while(num / 10 >= 1) {
                if(num%10==k){
                    cnt++;
                }
                if(num/10==k){
                       cnt++;
                   }
                num /= 10;
            }
        }
        return cnt;
    }
}

🗣️ 코드 설명

  1. 먼저 i부터 j까지 반복하는 for문을 만들었고, 그 안에서 일의 자리는 if문을 이용해 바로 k값과 비교하게 했습니다.
  2. 또 for문안에 whlie문을 넣어 10의 자리수부터 비교했습니다. 이 while문은 10을 계속 나누다가 나머지가 1보다 작아지게 되면 멈춥니다. while문 안에서는 %,/ 연산자로 k와 비교했습니다.

🔥다른 사람의 코드

class Solution {
    public int solution(int i, int j, int k) {
        int answer = 0;

        for (int num = i; num <= j; num++){
            int tmp = num;
            while (tmp != 0){
                if (tmp % 10 == k)
                    answer++;
                tmp /= 10;
            }
        }
        return answer;
    }
}

이 사람의 코드처럼 일의 자리 숫자도 %를 이용해 한번에 풀 수 있지만 그걸 잊고 나는 일의 자리를 따로 계산했다.. 그래서 내 코드가 더 어렵고 복잡해졌다. 아직 산술연산자에 대한 이해가 떨어지다는 것을 느꼈다.

 

 

%연산자 이해에 도움되는 블로그 ▼

https://dojang.io/mod/page/view.php?id=106

 

C 언어 코딩 도장: 15.1 나머지 연산하기

15 나머지 연산하기 C 언어에서는 사칙연산 이외에도 나머지 연산을 제공합니다. 그런데 나머지 연산을 왜 따로 제공하는 것일까요? 나머지 연산은 나눗셈과 깊은 관계가 있습니다. 보통 3.75 / 1.5

dojang.io