코딩테스트 문제
영어대문자를 입력받아 압축하는 프로그램 작성
예)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으로 많이 지정.
직접 다른 클래스의 전역변수로 접근하는 것이 아니고 전역변수로 접근하는 메서드를 만들어서 접근하도록.