티스토리 뷰

 157. Read N Characters Given read4의 연장선에 있는 문제로 이 문제 역시 비추천이(1.7K)로 추천(840)을 압도한다. 157번 문제와 다른 점은 완성해야되는 read() 함수가 여러번 불리는 것이다. 그렇기에 이전에 파일의 어디까지 읽었는지를 따로 저장하는 prevI라는 변수와 이전에 파일에서 읽어왔지만 4개까지만 반환이 가능해 아직 반환하지 못했던 내용을 저장해두고 다음에 read() 함수가 호출될 때 전달해주기 위한 버퍼인 prevB 버퍼를 추가하는 것이 핵심이다. 이번엔 Java로 풀어봤다.

 

public class Solution extends Reader4 {
    /**
     * @param buf Destination buffer
     * @param n   Number of characters to read
     * @return    The number of actual characters read
     */
    int prevI = 0;
    char[] prevB = new char[4];

    public int read(char[] buf, int n) {
        int four = 4;
        int cnt = 0;
        char[] buf4 = new char[4];

        for (int i=0; i<prevI; i++) {
            buf[cnt++] = prevB[i];
        }
        while (cnt < n && four == 4) {
            four = read4(buf4);
            for (int i=0; i<four; i++) {
                buf[cnt++] = buf4[i];
            }
        }
        prevI = 0;
        if (cnt > n) {
            for (int i=n; i<cnt; i++) {
                prevB[prevI++] = buf[i];
            }
        }
        
        return Math.min(cnt, n);
    }
}
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함
반응형