2026년 1월 7일 수요일 - 3주차
시간이 남을때는 atCoder에 있는 알고리즘 문제를 풀어보기.
완벽하게 만들어서 제출 할 용도는 아니기 때문에 사이트에서 제공되는 표준 입력코드와 출력코드를 사용해도 좋다.
난이도가 제일 낮은 ABC 랭크에 있는 문제를 위주로 풀고 A, B가 써있는 문제를 위주로 많이 풀어라.
이 과정이 끝난 후 취업준비 기간동안에도 알고리즘 문제들은 계속 풀어주는게 좋다.
「문제 설명」
- 1부터 9까지의 수를 정렬하라
「입력」- 4, 3, 1, 6, 7, 8, 9, 5, 2
「출력」- 1 2 3 4 5 6 7 8 9
int[] arr = {4, 3, 1, 6, 7, 8, 9, 5, 2
// 단축 문법. 실제에서는 잘 사용되지 않지만 문제 풀이 시에는 상수값으로 배열을
// 초기화 시키기 때문에 사용한다.
// 정렬 - 버블정렬 알고리즘 사용
for(int x = 0; x < arr.length; x++) {
for(int y = 0; y < arr.length - x - 1; y++)
// 아래줄에서 arr을 1 증가시키기 때문에 1을 빼줘야 하고,
// 제일 큰 수를 맨 끝으로 보내서 뒤쪽부터 정렬하는것이기 때문에
// 뒤쪽에는 이미 정렬이 끝나서 확정된 부분이기 때문에 다시 비교할
// 필요가 없기 때문에 x를 뺀다.
if(arr[y] > arr[y+1]) {
// 만약 앞의 값이 뒤의 값보다 크면 실행
// 메모리를 스왑하는 과정. 임시 변수 temp가 꼭 필요하다
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
// 이 3줄은 그냥 기본적인 스왑 알고리즘이다.
// 익숙해져야 함. (삼각형으로 돌려서 바꾸는 느낌)
}
}
}
// 순차로 한줄 출력
for(int a : arr) { // foreach문
System.out.print(a);
}
「문제 설명」
다음 조건을 모두 만족하는 경우, 영어 대문자와 소문자 알파벳으로 구성된 문자열을 멋진 문자열이라고 한다.
- 하나의 문자열은 하나의 대문자 영어 알파벳을 포함한다.
- 하나의 문자열은 하나의 소문자 영어 알파벳을 포함한다.
- 하나의 문자열의 모든 문자는 두 번 이상 반복될 수 없다.
*예를 들어, AtCoder와 Aa는 멋진 문자열이지만, atcoder와 Perfect는 그렇지 않다.
[문자열 S가 주어졌을 때, S가 멋진 문자열인지 아닌지를 결정하라.]
「제약」- 1 ≤ ∣S∣ ≤ 100
- S는 영어 대문자와 소문자로 구성된 하나의 문자열이다.
「입력」- 입력은 다음 형식의 표준입력으로 제공된다.
- S
「출력」- S가 멋진 문자열이면 Yes를 인쇄하고, 그렇지 않으면 No를 인쇄한다.
String S = "AtCoder";
char[] arr = S.toCharArray();
int lowerCaseCount = 0;
int upperCaseCount = 0;
boolean sameLetter = false;
// false일때 Perfect한 문자열 (좋은 문자열)
for(int i = 0; i < arr.length; i++) {
if(arr[i] >= 'a' && arr[i] <= 'z') {
lowerCaseCount++;
}
if(arr[i] >= 'A' && arr[i] <= 'Z') {
upperCaseCount++;
}
for(int x = i + 1; x < arr.length; x++) {
// 여기에 하나라도 걸리면 위에 if문 2개는 필요없어짐
if(arr[i] == arr[x]) {
sameLetter = true; // true면 좋지 않은 문자열
break;
}
}
}
if(!sameLetter && lowerCaseCount > 0 && upperCaseCount > 0 ) {
System.out.println("yes");
} else {
System.out.println("no");
}