일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 프로그래머스
- 백준 c++ 2468번
- Lv.3
- 백준 1103번
- 백준 1103번 게임
- 백준 17070번
- 17070번
- 유니티
- 수학숙제
- 백준
- dfs
- 코딩테스트
- 2468 c++
- 코테
- 백준 2870번
- 플레이어 이동
- 2870번 수학숙제 c++
- 2870번
- 2870번 수학숙제
- c++
- Algorithm
- 백준 1103번 c++
- Lv2
- 백준 17070번 c++
- 오브젝트 풀링
- 2870번 c++
- 백준 c++ 2870번
- Beakjoon
- Unity
- C#
- Today
- Total
주녘공부일지
[프로그래머스 C#] Lv.2 k진수에서 소수 개수 구하기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/92335
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 정답코드 및 핵심 아이디어, 유의사항
- 코드참조 ( 진수변환 -> 0을 기준으로 숫자 추출 -> 소수체크 )
+ 만약 테스트 1번만 시간초과가 뜬다면 소수를 체크하는 부분에서 최적화가 이루어지지 않았기 때문일 확률이 높다.
https://godgjwnsgur7.tistory.com/85
[C#] 소수 판별 최적화 알고리즘
1. 소수란? 1과 자기 자신으로만 나누어 떨어지는 수 public static bool IsPrime(int num) { if (num < 2) return false; for (int i = 2; i < num; i++) if (num % i == 0) return false; return true; } 시간복잡도 : O(log(√N) + 사실 일반
godgjwnsgur7.tistory.com
+ StringBuilder이 아닌 string으로 사용해도 시간초과는 뜨지 않지만, 문자열 내의 추가, 삭제 등이 많이 이루어진다면 StringBuilder를 사용하는 것이 좋다. // 테스트 1번 기준 2~3초 차이
https://godgjwnsgur7.tistory.com/66
[C#] StringBuilder VS String 연산 성능 비교
1. 성능비교 결과 기준 : String += 연산 VS StringBuilder.Insert() VS StringBuilder.Append() 연산 + String의 += 연산은 문자열 뒤에 문자열을 추가하는 것이 아닌, 새로운 문자열을 만드는 연산으로 생각보다 비용
godgjwnsgur7.tistory.com
using System;
using System.Text;
public class Solution
{
public int solution(int n, int k)
{
int answer = 0;
long num = 0;
StringBuilder sb = new StringBuilder();
// 1. 진수변환
while (n != 0)
{
sb.Insert(0, (n % k).ToString());
n /= k;
}
// 2. 0을 기준으로 숫자를 추출
for (int i = 0; i < sb.Length; i++)
{
if (sb[i] != '0')
{
num *= 10;
num += (long)sb[i] - '0';
}
else
{
if (Function(num))
answer++;
num = 0;
}
}
// 예외처리
if (Function(num))
answer++;
return answer;
}
// 소수 체크 함수
public bool Function(long num)
{
if (num < 2)
return false;
for (int i = 2; i <= Math.Sqrt(num); i++)
if (num % i == 0)
return false;
return true;
}
}
'CodingTest > Programmers Lv.2' 카테고리의 다른 글
[프로그래머스 C#] Lv.2 연속 부분 수열 합의 개수 (0) | 2023.08.25 |
---|---|
[프로그래머스 C#] Lv.2 귤 고르기 (0) | 2023.08.25 |
[프로그래머스 C#] Lv.2 호텔 대실 (0) | 2023.08.23 |
[프로그래머스 C#] Lv.2 소수 찾기 (2) | 2023.08.23 |
[프로그래머스 C#] Lv.2 스킬트리 (0) | 2023.08.23 |