백준 1940, 주몽

NJW·2023년 1월 13일
0

코테

목록 보기
133/170

문제 설명

두 개의 숫자를 가지고 M을 만들 수 있는 방법이 얼마나 있는지 구하는 문제다.

투 포인터 문제!
다만, 비슷한 문제는 많이 풀어봤어도 이렇게 투 포인터라고 의식해서 푼 건 거의 처음 아닐까...
그리고 주의해야 할 점이 있는데 바로 누적합이 아니라는 거다. 두 숫자를 더해서 구하는 문제이지 누적합이 아니다! 누적 합으로 구해놓고 왜 안 되는 거지? 싶어서 풀이까지 찾아본 1인...

코드 설명

  1. 변수
    0-1. N, 숫자의 개수를 알려주는 변수
    0-2. M, 최종 더하기 값
    0-3. arr, 숫자를 넣어 놓는 배열
    0-4. end, 끝을 정하는 변수. 시작인 start는 for문 에서
  2. for문을 시작할 숫자를 하나 정한다. 이때, sum은 0으로 초기화해주고 end는 start의 바로 뒤에 있는 숫자로 잡아 준다.
  3. while을 돌리면서 end가 n보다 작을 때까지 start와 end를 더해준다. 여기서 주의할 점! end는 sum에 더해주고 ++를 해야 한다. 그렇기에 end++로 해줘야 하는 거. ++를 안 넣어서 왜 안 되는 거지... 고민했던... ㅎㅎ. 컨디션 안 좋은 날의 새벽 시간이 이렇게 멍하답니다
  4. 만일 while문을 돌리다가 더한 값이 m으로 나오면 answer을 ++하고 break한다. 어차피 숫자들은 고유하기 때문에 같은 값이 새로 또 나올 수가 없다.
  5. 마지막으로 answer을 반환해주면 된다!

코드

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

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

        int n = Integer.parseInt(reader.readLine());
        int m = Integer.parseInt(reader.readLine());

        int[] material = new int[n];
        StringTokenizer st = new StringTokenizer(reader.readLine());
        for (int i=0; i<n; i++) {
            material[i] = Integer.parseInt(st.nextToken());
        }
        
        int sum = 0;
        int answer = 0;
        for(int start=0; start<n; start++)  {
            sum = 0;
            int end = start+1;

            while (end<n) {
                sum = material[start];
                sum += material[end++];
                if (sum == m) {
                    answer++;
                    break;
                }
            }

        }

        System.out.println(answer);


    }
}

여담

원래 아침 5시30분 즈음에 알고리즘 문제를 하나 풀면서 하루를 시작하는데, 오늘은 너무 컨디션이 안 좋았다. 이렇게 간단한 문제조차 내용 파악도 못 하고... ㅎㅎ. 심지어 중간에 다시 잠. ㅋㅋㅋㅋㅋ...

링크

https://www.acmicpc.net/problem/1940
참고 코드, https://hidelookit.tistory.com/178

profile
https://jiwonna52.tistory.com/

0개의 댓글