일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 패스트캠퍼스후기
- 소금폭탄
- 자바스크립트
- java11
- java
- 코딩교육
- 자바
- 수정렬하기3
- springboot
- fastcampus
- 10989
- 코테
- 노션
- SQL
- 패캠
- 코딩자격증
- 알고리즘
- DockerDesktop
- BOJ
- 3273
- 패스트캠퍼스
- sql문법
- 개발포트폴리오
- intelij
- 백준
- 코딩테스트
- 파이썬
- 스프링부트시작
- 배열
- 프로그래머스
- Today
- Total
기록용 블로그
패스트캠퍼스 핵심유형 20개로 한 번에 끝내는 알고리즘 코딩테스트 with Java 강의 2주차 본문

패스트캠퍼스 알고리즘 강의 2주차!
이번주는 ch4.완전탐색에 대해 배웠다.
완전탐색 이란?
- 모든 경우의 수를 시도한다. (brute force)
- 즉, 별도의 최적화 없이 효율성을 고려하지 않는 풀이 방법
- 효율을 생각하지 않기 때문에 문제의 크기가 작으면 유용하다.
- 문제의 크기가 클수록 시간/공간복잡도가 늘어나 적용이 어려울 수 있다.
- 완전한 정답이 아니라도 문제를 이해하거나, 테스트케이스를 확인하기 위한 용도로 적용해볼 수 있다.
- 부분점수 문제라면 전체를 풀지 못해도 작은 데이터에 대한 점수를 얻을 수 있다.
10448 유레카 이론
https://www.acmicpc.net/problem/10448
10448번: 유레카 이론
프로그램은 표준입력을 사용한다. 테스트케이스의 개수는 입력의 첫 번째 줄에 주어진다. 각 테스트케이스는 한 줄에 자연수 K (3 ≤ K ≤ 1,000)가 하나씩 포함되어있는 T개의 라인으로 구성되어
www.acmicpc.net
** preprocess()로 공통 함수 빼기
package 그리디;
import java.util.Scanner;
public class gd1 {
static boolean[] isEurekaNumber = new boolean[1001];
public static void preprocess(){
//1. K보다 작은 삼각수를 모두 구한다.
int[] triangleNumbers = new int[50];
int triangleNumberCount = 0;
int cnt = 0;
for(int i=1;;i++){
int triangleNumber = i * (i+1) / 2;
if(triangleNumber >= 1000) break;
triangleNumbers[triangleNumberCount++] = triangleNumber;
}
//2. 구해진 삼각수 세개의 합으로 K를 나타낼 수 있는지 확인한다.
for(int i=0; i< triangleNumberCount; i++)
for(int j=0; j<triangleNumberCount; j++)
for(int k=0; k<triangleNumberCount; k++) {
int sum = triangleNumbers[i] + triangleNumbers[j] + triangleNumbers[k];
if (sum <= 1000) isEurekaNumber[sum] = true;
}
}
public static void main(String[] args){
preprocess();
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while(T --> 0){
int K = sc.nextInt();
System.out.println(isEurekaNumber[K] ? "1" : "0");
}
}
}
11005 진법 변환 2
https://www.acmicpc.net/problem/11005
11005번: 진법 변환 2
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
** 아스키 잊지 말기
package 그리디;
import java.util.Scanner;
public class gd2 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int B = sc.nextInt();
String ans = "";
while(N > 0){
int D = N%B;
if(D<10) ans += D;
else ans += (char)(D - 10 + 'A');
N = N/B;
}
for(int i=ans.length() - 1; i>=0; i--)
System.out.print(ans.charAt(i));
}
}
11068 회문인 수
https://www.acmicpc.net/problem/11068
11068번: 회문인 수
어떤 수를 왼쪽부터 읽어도, 오른쪽부터 읽어도 같을 때 이 수를 회문인 수라고 한다. 예를 들어, 747은 회문인 수이다. 255도 회문인 수인데, 16진수로 표현하면 FF이기 때문이다. 양의 정수를 입력
www.acmicpc.net
* 두 단어 같은 지 비교 시 /2로 비교하기~~
package 그리디;
import java.util.Scanner;
public class Main {
private static int[] convertBase(int x, int B) {
int len = 0, copyX = x;
while (copyX>0){
copyX/=B;
len++;
}
int[] digit = new int[len];
len = 0;
while(x>0){
digit[len++] = x % B;
x = x/B;
}
return digit;
}
public static boolean isPalindrome(int[] digit){
for(int i=0;i<digit.length/2;i++)
if(digit[i] != digit[digit.length - i - 1])
return false;
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while ( T --> 0 ) {
int x = sc.nextInt();
boolean ans = false;
for(int i=2;i<=64;i++){
int[] digit = convertBase(x,i);
if (isPalindrome(digit)) {
ans = true;
break;
}
}
System.out.println(ans ? "1" : "0");
}
}
}
강의 링크 : https://fastcampus.co.kr/dev_online_codingtest
"본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다."
'개발 > 알고리즘 공부' 카테고리의 다른 글
패스트캠퍼스 핵심유형 20개로 한 번에 끝내는 알고리즘 코딩테스트 with Java 강의 3주차 (0) | 2023.05.05 |
---|---|
[프로그래머스][LV1] 완주하지 못한 선수 (0) | 2023.04.29 |
[알고리즘] 코딩테스트 유형 (feat. 프로그래머스) (0) | 2023.04.25 |
[프로그래머스] 등수매기기 (0) | 2023.04.24 |
[자료구조] 1. List, Set, Map (0) | 2023.04.20 |