휴먼교육센터 개발자과정 38일차

조하영·2022년 9월 28일
0

코딩테스트 문제

영어대문자를 입력받아 압축하는 프로그램 작성
예)AAABCCDDDE -> A3BC2D3E

한번만 나오면 숫자 안나오고 2번 이상 반복되면 문자옆에 숫자 표시

내가 만든 코드

package Tr;

import java.util.Scanner;

public class Day21_01 {

    public static void main(String[] args) {
        System.out.println("압축할 문자열을 입력하세요 ");
        Scanner in = new Scanner(System.in);
        String input = in.nextLine();
        String a = input.toUpperCase();
        in.close();
        int cnt = 1;
        // 한 문자열 안에 연속적으로 중복되는 문자를 찾는 문제.
        // 기본적으로 문자열이 바로 이어지는 문자와 같을때마다
        // cnt값을 하나씩 더해주는 방향으로 생각하고 문제를 접근.
        for (int i = 0; i < a.length() - 1; i++) {
            // 마지막 문자열은 뒤의 문자가 없으므로 문자열의 길이 -1을 해
            if (a.charAt(i) == a.charAt(i + 1)) {
                // charAt을 사용하여 이어지는 문자열의 같고 다름을 비교
                // 앞 뒤의 문자가 같다면 cnt++을 해줌.
                cnt++;
            } else {// 앞 뒤의 문자가 다른 순간 중복된 문자가 끝났으므로
                    // 그 시점의 cnt 값과 그 문자를 출력
                    // 반복되지 않은 문자인 경우 반복된 횟수를 나타내면 안되므로
                    // 조건문을 만들어 반복된 횟수가 1인 경우는 미출력
                if (cnt > 1) {
                    System.out.print(a.charAt(i));
                    System.out.print(cnt);
                    cnt = 1;
                } else {
                    System.out.print(a.charAt(i));
                }
            }
        }
        // for문을 돌고 난 후의 마지막 중복된 문자열과 그 횟수를 출력
        if (cnt > 1) {
            System.out.print(a.charAt(a.length() - 1));
            System.out.print(cnt);
        } else {
            System.out.print(a.charAt(a.length() - 1));
        }
    }
}

선생님이 짠 코드

package Tr;

import java.util.Scanner;

public class Day21_02 {

    public static void main(String[] args) {
        System.out.println("압축할 문자열을 입력하세요 ");
        Scanner in = new Scanner(System.in);
        String input = in.nextLine();
        String a = input.toUpperCase();
        in.close();
        String newA = "";
        int cnt = 0;

        for (int i = 0; i < a.length(); i++) {
            cnt = 0;
            for (int j = i; j < a.length(); j++) {
                if (a.charAt(i) != a.charAt(j)) {
                    break;
                } else {
                    cnt++;
                }
            }
            if (cnt > 1) {
                newA = newA + a.charAt(i) + cnt;
                i = i + cnt - 1;
            } else {
                newA = newA + a.charAt(i);
            }
        }
        System.out.println(newA);
    }
}

접근제어자

접근제어자는 클래스 기준으로 생각해서 자신의 클래스 자원을 외부에서 참조변수로 사용할때의 권한을 부여
외부라고 함은 같은 클래스, 같은 패키지의 다른 클래스, 다른 패키지의 다른 클래스 3가지로 분류할 수 있다.

종류
Private- 오직 같은 클래스 내에서만 접근가능
Public- 모두 가능, 단 프로젝트가 다르면 접근불가
default- private 성격을 포함하며 같은 패키지 다른 클래스에서만 접근 가능, 다른패키지는 접근 불가
protected

객체지향에 어울리게 작성하는 법은 일단 모두 private로 해놓고 외부에서 사용한다고 할때 public으로 열어둠

단 전역변수는 public 사용 잘 안함.
메서드만 public으로 많이 지정.

직접 다른 클래스의 전역변수로 접근하는 것이 아니고 전역변수로 접근하는 메서드를 만들어서 접근하도록.

profile
공부하는 개발자

0개의 댓글