Notice
Recent Posts
Recent Comments
Link
«   2026/07   »
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
Tags
more
Archives
Today
Total
관리 메뉴

어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨

[ Java / 백준 9086, 11720] charAt의 사용에 대해서 본문

Back - end/JAVA

[ Java / 백준 9086, 11720] charAt의 사용에 대해서

낫쏘링 2023. 9. 5. 20:28
728x90
1. charAt(인덱스)는 해당 인덱스의 문자를 반환한다.
    하지만, 반환하는 데이터는 char형 또는 int형임을 알 수 있다.
    그냥 String print = str.charAt(0)으로 하면 오류 발생
    int print = str.charAt(0) / char print = str.charAt(0)은 오류 발생하지 않는다.
2. int로 받을 때와 char로 받을 때 값이 다르다.
    String str = "abcdefg" 에서 0번 인덱스를 출력했을 때 int로 받으면 103 출력 / char로 받으면 a 출력
    때문에 int로 받아서 + 수식을 사용하면 97 + 103 으로 계산해서 200을 출력한다.
    char로 받았을 경우 문자로 출력되는 것을 확인했기 때문에 당연히 a + g가 돼서 ag가 될 것이라고 착각할 수 있다.
    하지만, char 데이터타입의 경우 +, -, /, % 등등 수식 사용시 자동으로 숫자형으로 변환된다.(아스키 코드 기준)
    때문에 char로 받아서 + 수식을 사용하면 ag가 아니라 int로 받았을 경우와 마찬가지로 200을 출력한다.

    그래서 String print = String.valueOf(str.charAt(0)) + String.valueOf(str.charAt(str.length() - 1)); 에서
    String print = String.valueOf(str.charAt(0) + str.charAt(str.length() - 1)); 처럼 + 계산 후 형변환시
    원하는 값과 다르게 나온다 각각 형변환 후 계산하면 ag 출력 / 계산 후 형변환 하면 200 출력(문자열 200)
3. BufferedWriter를 통해서 출력하는 경우
    buffer는 문자열을 출력하기 때문에
    int print = str.charAt(0); 이 숫자 97일 경우
    bw.write(print); 를 통해 출력하면 문자 a로 자동 변환해서 출력한다. 
    bw.write(String.valueOf(print2)); 처럼 직접 형변환해주면 97(문자열)로 그대로 출력된다.
String str = "abcdefg";

String print = String.valueOf(str.charAt(0)) + String.valueOf(str.charAt(str.length() - 1));

int print2 = str.charAt(0);
int print3 = str.charAt(str.length() - 1);

System.out.println(print);
System.out.println(print2);
System.out.println(print3);
System.out.println(print2 + print3);


// 출력 결과
// ag
// 97
// 103
// 200
[ 백준 11720번 ]

BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(System.out));

int num = Integer.valueOf(br.readLine());
int sum = 0;

// 숫자들을 String으로 받아줬음
String numGroup = br.readLine();

for(int i = 0; i < num; i += 1) {
    /*
     * charAt의 사용법을 주의한다. 위에서 numGroup을 문자열 String으로 받아준 것을 기억해야한다! 
     * 만약 numGroup이 1234라면... 숫자 1234가 아닌 문자열 "1234"라는 점 유의 
     * 즉 charAt로 하나씩 떼어내어 데이터 형이char가 됐을 때  '1'은 숫자 1이 아니고 아스키 코드에 따라 49가 된다. 
     * 그래서 '0' (아스키 코드에 따르면 숫자 48) 를 빼주면 숫자 1이 나온다.
     */
    sum += numGroup.charAt(i) - '0';
}

// BufferedWriter는 문자열을 출력하기 때문에 다시 형변환
bw.write(String.valueOf(sum));
bw.flush();
bw.close();
br.close();
728x90