2022년 4월 24일에 정보처리기사 필기를 보고 왔다.

아직 필기 결과는 나오지 않았지만, 정보처리기사 필기시험의 경우 시험지를 가지고 나올 수 있어서 가채점을 통해 미리 결과를 짐작할 수 있었다. 

5과목 평균이 60점을 넘으면 되고, 한 과목당 적어도 40점이 넘어야 한다.

다행히 가채점한 결과, 두 가지 조건은 만족해서 필기는 통과할 것 같다.

 

하필 중간고사 기간이어서 공부를 이틀밖에 못했다. 말이 이틀이지 거의 하루나 다름없다. 총 14시간 정도 공부했다.

그나마 컴퓨터 전공이어서 전에 들었던 '소프트웨어공학'이나 '컴퓨터 네트워크'같은 수업에서 배운 것이 많이 나와 가능했던 것 같다. 

 

공부한 결과,,,

개인적으로 4과목은 반이 코딩문제여서 전공자라면 4과목을 열심히 보지 않아도 통과할 수 있을 것 같았다.

3과목도 데이터베이스 관련 내용이라서 SQLD 자격증을 딴 사람이라면 크게 어렵지 않을 것 같다.

5과목이 정말 어려웠고 1,2과목은 난이도는 평이했는데 내가 공부를 많이 안 해서 어려웠다.

 

시나공 정보처리기사 필기 책으로 공부했는데 아주아주 추천한다. A, B, C, D로 많이 나오는 단원을 알려줘서 시간을 절약하기에 좋았다. 생각보다 보는데 시간이 오래 걸려서 A로 표시되어있는 단원은 외우고, B로 표시되어 있는 단원은 읽었던 것 같다. 시나공 필기 책을 사면 기출문제집도 같이 오는데 꼭꼭 풀어보는 걸 추천한다. 실제 시험에서 같은 문제를 몇 개 발견했다. 정 시간이 없는 사람은 A로 표시되어 있는 단원을 외우고, 기출을 돌리면서 외우면 좋을 것 같다.

 

그리고 수험표는 따로 안 뽑아가도 되는 줄 알았는데 내가 시험 본 곳은 감독관이 수험표에 있는 얼굴이랑 내 얼굴을 대조해본다고 수험표를 확인했다. 물론 모바일 수험표도 되지만 귀찮으니 그냥 수험표를 뽑아가는 게 나을 것 같다.

 

실기 시험은 7월 중반이라서 열심히 준비할 수 있을 것 같다.

728x90

문제

n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.

예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.

 

입력

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

 

출력

첫째 줄에 답을 출력한다.


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        String[] st = br.readLine().split(" ");

        int[] dp = new int[n];

        dp[0] = Integer.parseInt(st[0]); 
        int max = dp[0];

        for(int i = 1; i < n; i++){
            dp[i] = Math.max(dp[i-1]+Integer.parseInt(st[i]), Integer.parseInt(st[i]));
            max = max < dp[i] ? dp[i] : max;
        }

        System.out.println(max);

    }
}

 

풀이

dp[i]는 i번째 정수까지 있을 때의 구할 수 있는 합 중 가장 큰 합이다.

st는 입력받은 배열이다.

이때 정수 n이 최소 1개이므로 dp[0]에는 st[0]을 미리 넣고, 가장 큰 합을 저장하는 변수인 max에도 st[0]을 넣어놓는다.

dp[i]는 i-1번째 정수까지 있을 때의 구할 수 있는 최대 합에 st[i]를 더한 것이 될 수도 있고, 아니면 현재 들어온 st[i] 자체가 될 수도 있다. 따라서 두 수를 비교해 더 큰 수를 dp[i]에 저장하고, max 값도 비교해서 바꿔준다.

728x90

'Algorithm > 백준' 카테고리의 다른 글

[백준][Java] 6721. Backward numbers  (0) 2022.04.30
[백준][Python] 7360. Undercut  (0) 2022.04.30
[백준][Python] 19604. Art  (0) 2022.04.25
[백준][Java] 17548. Greetings!  (0) 2022.04.25
[백준][Java] 1934. 최소공배수  (0) 2022.04.17

문제

Mahima has been experimenting with a new style of art. She stands in front of a canvas and, using her brush, flicks drops of paint onto the canvas. When she thinks she has created a masterpiece, she uses her 3D printer to print a frame to surround the canvas.

Your job is to help Mahima by determining the coordinates of the smallest possible rectangular frame such that each drop of paint lies inside the frame. Points on the frame are not considered inside the frame.

 

입력

The first line of input contains the number of drops of paint, N, where 2 ≤ N ≤ 100 and N is an integer. Each of the next N lines contain exactly two positive integers X and Y separated by one comma (no spaces). Each of these pairs of integers represents the coordinates of a drop of paint on the canvas. Assume that X < 100 and Y < 100, and that there will be at least two distinct points. The coordinates (0, 0) represent the bottom-left corner of the canvas.

 

출력

Output two lines. Each line must contain exactly two non-negative integers separated by a single comma (no spaces). The first line represents the coordinates of the bottom-left corner of the rectangular frame. The second line represents the coordinates of the top-right corner of the rectangular frame.


코드

import sys

if __name__ == '__main__':
    N = int(sys.stdin.readline().rstrip())

    x_coordinates = []
    y_coordinates = []

    for i in range(N):
        x,y = map(int, sys.stdin.readline().rstrip().split(","))
        x_coordinates.append(x)
        y_coordinates.append(y)
    
    print(min(x_coordinates)-1,min(y_coordinates)-1, sep=",")
    print(max(x_coordinates)+1,max(y_coordinates)+1, sep=",")

 

풀이

각 점을 포함하는 프레임의 왼쪽 아래와 오른쪽 위 좌표를 구하는 것이므로, 왼쪽 아래와 오른쪽 위 프레임의 위치가 어디가 될지 생각해보면 된다. 프레임의 왼쪽 아래의 x, y 좌표는 분포하는 점 중에서 가장 작은 x와 가장 작은 y와 같을 것이다. 이때, 프레임이 점 밖에 있어야 하기 때문에, (가장 작은 x-1, 가장 작은 y-1)이 왼쪽 아래의 좌표가 된다.

오른쪽 위는 위가 같은 방법으로 (가장 큰 x+1, 가장 작은 y+1) 가 될 것이다.

 

728x90

'Algorithm > 백준' 카테고리의 다른 글

[백준][Python] 7360. Undercut  (0) 2022.04.30
[백준][Java] 1912. 연속합  (0) 2022.04.28
[백준][Java] 17548. Greetings!  (0) 2022.04.25
[백준][Java] 1934. 최소공배수  (0) 2022.04.17
[백준][Java] 2579. 계단 오르기  (0) 2022.04.13

드디어 연속 16일을 달성해서 Solved.ac 새싹 4단계를 달성했다.

전에 할 수 있었는데 하루를 놓쳐서 다시 처음부터 시작했다는 게 너무 아쉽다.

 

학기 중에 최대한 꾸준히 푸니까 silver 5에서 silver 2로 올랐다. 빨리 골드로 올라가고 싶다!!

 

 

 

728x90

'Diary' 카테고리의 다른 글

Solved.ac 새싹 5단계 달성🌱  (0) 2022.05.11
코드트리 쌀 기부 & solved.ac 현황  (0) 2022.05.07
퍼스널 컬러 받은 날  (0) 2022.02.22
1월 21일 일기  (0) 2022.01.22
1월 20일 일기  (0) 2022.01.20

문제

Now that Snapchat and Slingshot are soooo 2018, the teenagers of the world have all switched to the new hot app called BAPC (Bidirectional and Private Communication). This app has some stricter social rules than previous iterations. For example, if someone says goodbye using Later!, the other person is expected to reply with Alligator!. You can not keep track of all these social conventions and decide to automate any necessary responses, starting with the most important one: the greetings. When your conversational partner opens with he...ey, you have to respond with hee...eey as well, but using twice as many e’s!

Given a string of the form he...ey of length at most 1000, print the greeting you will respond with, containing twice as many e’s.

 

입력

  • The input consists of one line containing a single string s as specified, of length at least 3 and at most 1000.

 

출력

Output the required response.


코드

import java.util.Scanner;

public class 백준_17548 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String st = sc.next();

        int eCount = 0;
        
        for(int i = 0; i < st.length(); i++){
            char c = st.charAt(i);
            if(c == 'e'){
                eCount += 1;
            }
        }
        System.out.print("h");
        for(int i = 0; i < eCount*2; i++){
            System.out.print("e");
        }
        System.out.print("y");
    }
}

 

풀이

문제를 해석해보면 입력 String의 e를 2배로 출력하면 된다. 최소 입력은 'hey'이다.

입력받은 String에서 e의 개수를 세서 eCount 변수에 저장했다. 

출력은 h, e, y를 따로 출력해 e를 중간에 여러 개 출력할 수 있도록 했다.

728x90

'Algorithm > 백준' 카테고리의 다른 글

[백준][Java] 1912. 연속합  (0) 2022.04.28
[백준][Python] 19604. Art  (0) 2022.04.25
[백준][Java] 1934. 최소공배수  (0) 2022.04.17
[백준][Java] 2579. 계단 오르기  (0) 2022.04.13
[백준][Java] 1904. 01타일  (0) 2022.04.11

+ Recent posts