10798번: 세로읽기

총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’

www.acmicpc.net

 

Language: Java

 

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
32
33
34
35
36
37
38
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        char[][] charArr = new char[5][15];
        int maxLength = 0;
        
        for(int i=0; i<5; i++) {
            String s = br.readLine();
            maxLength = Math.max(maxLength, charArr[i].length);
            for(int j=0; j<s.length(); j++)
                charArr[i][j] = s.charAt(j);
        }
 
        StringBuilder sb = new StringBuilder();
 
        for (int i=0; i<maxLength; i++) {
            for (int j=0; j<5; j++) {
                if (charArr[j][i] == '\0') {
                    continue;
                }
                sb.append(charArr[j][i]);
            }
        }
 
        bw.write(sb.toString());
        
        bw.flush();
    }
}
 
 
 

⭐ char[]와 Chacter[] 차이

: Character 클래스는 char 값을 포장하고 추가적인 기능을 제공하기 위해 사용

→  문자열을 다루거나 문자 검색과 같은 고급 문자 작업을 수행해야 할 때 Character[]을 사용

: 대부분의 경우, 문자 배열을 나타내기 위해 char[]을 사용하는 것이 더 간단하고 효율적

 

StringBuffer()와 StringBuilder() 차이

: StringBuffer - 동기화 → 멀티스레드 환경에서 동기화가 필요하거나 스레드 안전성이 중요한 경우

: StringBuilder - 비동기화  단일 스레드 환경에서 문자열 조작을 수행하고 성능에 중점을 둘 경우

: 에는 StringBuffer를 사용하는 것이 적합

 

* 오버헤드(overhead): 추가 작업으로 인한 성능 저하

* 스레드(thread): 프로세스 내에서 독립적으로 실행될 수 있는 작은 실행 단위

 

 

 

소스 코드
🔗 HJ0216/TIL/BOJ

 

 

2566번: 최댓값

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

www.acmicpc.net

 

Language: Java

 

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
32
33
34
35
36
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.util.StringTokenizer;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
 
        int[][] intArr = new int[9][9];
        int intMax = intArr[0][0];
        
        int iMax=0;
        int jMax=0;
        for(int i=0; i<9; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            for(int j=0; j<9; j++) {
                intArr[i][j] = Integer.parseInt(st.nextToken());
                if(intArr[i][j] >= intMax) {
                    intMax = intArr[i][j];
                    iMax = i+1;
                    jMax = j+1;
                }
            }
        }
        
        bw.write(intMax + " " + iMax + " " + jMax);
        bw.flush();
    }
}
 
 
 

 

 

 

소스 코드
🔗 HJ0216/TIL/BOJ

 

 

24267번: 알고리즘 수업 - 알고리즘의 수행 시간 6

오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시

www.acmicpc.net

 

Language: Java

 

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
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int n = Integer.parseInt(br.readLine());
 
        BigInteger sum = BigInteger.ZERO;
 
        for (int i = n - 2; i > 0; i--) {
            BigInteger iBigInteger = BigInteger.valueOf(i);
            sum = sum.add(iBigInteger.multiply(iBigInteger.add(BigInteger.ONE)).divide(BigInteger.TWO));
        }
 
        bw.write(sum.toString() + "\n" + 3);
        bw.flush();
        }
}
 
 
 

⭐ 3중 반복문으로 long 타입 변수 범위를 넘어 BigInteger 활용

 - n은 개별 입력값이므로 BigInteger가 아닌 int 선언 가능

 - 기본형 타입의 변수와 달리 값 입력 시, ZERO, ONE 등의 방법으로 가능

 - 기본형 타입의 변수와는 달리 덧셈의 경우에 +가 아닌 add 사용

 

 

 

소스 코드
🔗 HJ0216/TIL/BOJ

 

 

24266번: 알고리즘 수업 - 알고리즘의 수행 시간 5

오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시

www.acmicpc.net

 

Language: Java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        BigInteger n = new BigInteger(br.readLine());
        
        BigInteger result = n.multiply(n).multiply(n);
        
        bw.write(result + "\n" + 3);
        
        bw.flush();
        bw.close();
    }
}
 
 
=

⭐ 3중 반복문으로 long 타입 변수 범위를 넘어 BigInteger 활용

 - n은 개별 입력값이므로 BigInteger가 아닌 int 선언 가능

 - 기본형 타입의 변수와는 달리 곱셈의 경우에 *가 아닌 multiply 사용

 

 

 

소스 코드
🔗 HJ0216/TIL/BOJ

 

 

24265번: 알고리즘 수업 - 알고리즘의 수행 시간 4

오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시

www.acmicpc.net

 

Language: Java

 

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
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int n = Integer.parseInt(br.readLine());
 
        long sum=0;
        for(int i=(n-1); i>0; i--) {
            sum +=i;
        }
                
        bw.write(sum + "\n" + 2);
        
        bw.flush();
        bw.close();
    }
}
 
 
 

⭐ 1부터 n-1까지의 합 = (n*(n-1))/2

 

 

 

소스 코드
🔗 HJ0216/TIL/BOJ