[프로그래머스/JAVA] Lv.0 k의 개수

또치·2023년 1월 19일
0

프로그래머스 JAVA

목록 보기
6/20
post-thumbnail

k의 개수

🎠 기억하고 싶은 부분 🎠

1. 문자열에 특정 값이 포함되어 있는지 확인하기

문자열.contains("값")
결과는 true, false

2. int -> char 변환
toString( ) 사용
int를 string으로 변환해서 char값 가져오기

Integer.toString().charAt(0)
charAt으로 char 구하는 건데 인덱스를 0으로 넣고 풀어야되니까 값이 한자리 수일 떄만 좋게 사용할듯
수가 더 커지면 그냥 다른 방식사용하자

🎯 문제

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

과정

class Solution {
    public int solution(int i, int j, int k) {
        int answer = 0;
		while(i<=j) {
			if(String.valueOf(i).contains(String.valueOf(k))) {
				for(int p=0; p<String.valueOf(i).length(); p++) {
					if(String.valueOf(i).charAt(p)==Integer.toString(k).charAt(0)) {
                    // 숫자 같은거 있을때 마다 ++
						answer++;
					}
				}
				
			}
			i++;
		}
        return answer;
    }
}

🎲 답안

코테푸니까 수학시간 생각나..도대체 이런걸 왜 궁금해하는건가 싶어...
암튼 처음에는 i부터 j까지 모든 수를 배열에 넣어야되나 생각했는데 조건이 100,000까지라 크기가 너무 커질것 같아서 그냥 문자열로 바꿔가지고 그 숫자를 포함하는지 확인하는 식으로 풀었다.
for문 돌리자니 그 100,000이 너무 걸렸어...상관없을 수도 있지만... 암튼 그래서 while문 돌렸다
i부터 j까지의 수로 구하는거니까 반복문 돌때마다 i++해줘서 j가 될때까지만 돌리는 거로 조건 설정했다.
그렇게해서 그냥 contains로 비교해줬는데 풀어보니까 11, 22 , 33 뭐 이런게 문제였다.
수가 똑같은게 2번 나오면 결과변수에 +2가 돼야되는데 한번만 수가 더해지는게 문제였어
그래서 똑같은 수를 포함한다는 if문 통과하면 그 숫자로 반복문을 다시 돌려가지고 charAt해서 한글자씩 쪼갠 다음에 다시 비교해서 결과변수 수를 올려줬다.
약간 이상하게 풀었나 싶긴한데 뭐 일단 만족이야

0개의 댓글