2023. 10. 12. 17:01, 알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/120887
#include <string>
#include <vector>
using namespace std;
int solution(int i, int j, int k) {
int answer = 0;
for(int t=i; t<=j; t++){
int q=t;
int p=0;
while(q>0){
p=q%10;
if(p==k) answer++;
q/=10;
}
}
return answer;
}
처음에는 주어지는 int 값들을 string 으로 형변환 한뒤에 string의 개별 char에 대해서 k와 같은 글자를 가지는지로 판별하는 방법을 떠올렸다가, 수를 스트링으로 바꾸고 스트링에서 다시 int로 바꾸고 하는 형태로 짜는것보단 그냥 수 자체로 비교를 하자는 생각으로 개별 자리수에 대한 parsing을 하는 방식으로 코드를 작성하였다.
다른 사람의 풀이를 보니까 위와 같이 parsing을 하면서 1의 자리씩 개별적으로 판단하는 형태의 코드를 만드는 방법중에, 굉장히 간단하게 표현하는 코드가 있어서 첨부해보겠다.
#include <string>
#include <vector>
using namespace std;
int solution(int i, int j, int k) {
int answer = 0;
for (int a = i; a <= j; a++)
for (int b = a; b > 0; b /= 10) {
if (b % 10 == k) answer++;
}
return answer;
}
위의 코드는 개별 숫자 a에 대하여, b에 a를 대입하고, b를 for문을 통해서 b=b/10; 형태로 반복하며 b>0 일때인 동안 반복하겠다는 형태로 작성한 코드로 아주아주 간결하게 내가 위에서 while 문으로 만든 코드를 for문으로 표현해서 보기좋게 만든 코드이다.
int q=t;
int p=0;
while(q>0){
p=q%10;
if(p==k) answer++;
q/=10;
}
위의 부분이
for (int b = a; b > 0; b /= 10) {
if (b % 10 == k) answer++;
}
이 부분과 같은 것이다.
보기에 더욱 깔끔하고 이해하기 쉬운 형태로 코드를 작성했다고 보여진다.
위의 for문에 사용한 형태처럼 되어 있는것을, 내가 작성한 while 문제 적용해서 조금더 코드를 간결하고 깔끔해보이게 바꾸어본다면,
#include <string>
#include <vector>
using namespace std;
int solution(int i, int j, int k) {
int answer = 0;
for(int a= i; a<= j; a++){
int t =a;
while(t){
if(t%10==k)answer++;
t/=10;
}
}
return answer;
}
이와같이 할 수 있을 것이다.
조금 더 간결하고 불필요한 변수의 선언이 없이 코드를 작성해보도록 하자.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Lv 0. 종이 자르기 (0) | 2023.10.12 |
---|---|
Lv 0. 문자열 밀기. (0) | 2023.10.12 |
Lv 0. A로 B 만들기 (0) | 2023.10.11 |
Lv 0. 이진수 더하기. *다시 풀어보기* (0) | 2023.10.11 |
Lv 0. 치킨 쿠폰. *다시 풀어보기* (0) | 2023.10.11 |
Comments, Trackbacks