KDT 공부 일지 - 2026.01.07

김시코·2026년 1월 7일

KDT 공부 일지

목록 보기
2/27

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);
        }

난이도 B - 완벽한 문자열

「문제 설명」
다음 조건을 모두 만족하는 경우, 영어 대문자와 소문자 알파벳으로 구성된 문자열을 멋진 문자열이라고 한다.

  • 하나의 문자열은 하나의 대문자 영어 알파벳을 포함한다.
  • 하나의 문자열은 하나의 소문자 영어 알파벳을 포함한다.
  • 하나의 문자열의 모든 문자는 두 번 이상 반복될 수 없다.
    *예를 들어, 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");
        }

profile
취업하고싶다...

0개의 댓글