[집중 문제] it 취업을 위한 알고리즘 문제 풀이 입문 (With C/C++) 22. 온도의 최대값

2024. 7. 4. 14:01·알고리즘&자료구조 공부/it 취업을 위한 알고리즘 문제풀이 입문 강의

[기억할 내용들]

  1. 원래 내가 풀던 방식처럼 이중 for 문을 사용하면 시간 초과 에러가 난다.
  2. 이 문제를 단일 for 문을 이용하여 해결할 수 있다.
  3. 이 문제처럼 입력의 범위가 너무 클 때는 동적할당을 이용하는 것이 좋다(메모리 낭비 방지).

 

[나의 코드]

  • 처음 코드
  • 이중 for 문을 사용하여 문제를 해결했더니 시간 초과 에러가 났다.
#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);

	int n, k;
	cin >> n >> k;
	vector<int> table;

	for (int i = 0; i < n; i++) {
		int temp;
		cin >> temp;
		table.push_back(temp);
	}

	int max = -2147000000;
	for (int i = 0; i < table.size() - k + 1; i++) {
		int sum = table[i];

		for (int j = i + 1; j < i + k; j++) {
			sum += table[j];
		}

		if (max < sum)
			max = sum;
	}

	cout << max << "\n";

	return 0;
}

 

  • 강의 초반 보고 다시 푼 코드
  • 단일 for 문으로 풀었다.
#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

//for 문 한번 돌면서 해결할 수있는 방법
int main() {
	int n, k;
	cin >> n >> k;
	vector<int> table(n);

	for (int i = 0; i < n; i++) {
		cin >> table[i];
	}

	int start = 0;
	int max = 0;
	for (int i = 0; i < k; i++)
		start += table[i];
	max = start;

	for (int i = k; i < n; i++) {
		int sum = start + table[i] - table[i - k];
		if (sum > max) max = sum;

		start = sum;
	}

	cout << max << "\n";

	return 0;
}

 

 

[강의 코드]

#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

// 이 문제는 동적할당이 필요함. 안그러면 입력의 크기가 작을 때 메모리의 낭비가 심하거덩..
int main() {
	int n, k, i, sum = 0, max;
	scanf_s("%d %d", &n, &k);
	
	vector<int> a(n);
	for (i = 0; i < n; i++)
		scanf_s("%d", &a[i]);

	for (i = 0; i < k; i++)
		sum += a[i];
	max = sum;

	for (i = k; i < n; i++) {
		sum = sum + (a[i] - a[i - k]);
		if (sum > max) max = sum;
	}

	printf("%d\n", max);

	return 0;
}

 

 

[의견]

맨 처음 k 만큼의 수를 먼저 더해놓은 다음에 단일 for 문을 돌면서 값을 하나 더하고 하나 빼고 하는 과정으로 문제를 해결할 수 있다는 사실을 처음 알게 되었다. 이 문제는 진짜 기억해두면 두고두고 잘 사용할 것 같다. 좋은 풀이 방법을 얻은 것 같다. 열심히 해보자!!!!! 

 

 

 


 

[참고자료]

투 포인터, 슬라이딩 윈도우 기법 (tistory.com)

 

투 포인터, 슬라이딩 윈도우 기법

투 포인터(Two Pointers method) 투 포인터란? - 배열을 따라 두 개의 포인터를 이동시키면서 데이터를 처리하는 알고리즘 - 포인터 두 개는 모두 한쪽 방향으로 움직인다. - 투 포인터를 이용한 경우

9327144.tistory.com

 

'알고리즘&자료구조 공부/it 취업을 위한 알고리즘 문제풀이 입문 강의' 카테고리의 다른 글
  • it 취업을 위한 알고리즘 문제 풀이 입문 (With C/C++) 24. Jolly Jumpers
  • [집중 문제] it 취업을 위한 알고리즘 문제 풀이 입문 (With C/C++) 23. 연속 부분 증가수열
  • it 취업을 위한 알고리즘 문제 풀이 입문 (With C/C++) 21. 카드게임
  • it 취업을 위한 알고리즘 문제 풀이 입문 (With C/C++) 20. 가위 바위 보
dubu0721
dubu0721
dubu0721 님의 블로그 입니다.
  • dubu0721
    dubu0721 님의 블로그
    dubu0721
  • 전체
    오늘
    어제
    • 분류 전체보기 (352) N
      • 프로그래밍언어론 정리 (5)
      • 컴퓨터네트워크 정리 (5)
      • 알고리즘&자료구조 공부 (64)
        • it 취업을 위한 알고리즘 문제풀이 입문 강의 (60)
        • 학교 알고리즘 수업 (3)
        • 실전프로젝트I (0)
      • 백준 문제 (204)
        • 이분탐색 (7)
        • 투포인트 (10)
        • 그래프 (11)
        • 그리디 (24)
        • DP (25)
        • BFS (21)
        • MST (7)
        • KMP (4)
        • Dijkstra (3)
        • Disjoints Set (4)
        • Bellman-Ford (2)
        • 시뮬레이션 (3)
        • 백트래킹 (15)
        • 위상정렬 (5)
        • 자료구조 (25)
        • 기하학 (1)
        • 정렬 (11)
        • 구현 (8)
        • 재귀 (8)
        • 수학 (8)
        • 트리 (1)
      • 유니티 공부 (11)
        • 레트로의 유니티 게임 프로그래밍 에센스 (11)
        • 유니티 스터디 자료 (0)
        • C# 공부 (0)
      • 유니티 프로젝트 (48)
        • 케이크게임 (13)
        • 점토게임 (35)
      • 언리얼 공부 (10)
        • 이득우의 언리얼 프로그래밍 (10)
      • 진로 (1)
      • 논문 읽기 (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C#
    백트래킹
    백준
    이분탐색
    BFS
    오블완
    유니티 프로젝트
    유니티 공부 정리
    골드메탈
    시뮬레이션
    그래프
    스택
    자료구조
    맵
    티스토리챌린지
    유니티
    레트로의 유니티 프로그래밍
    바킹독
    이득우
    투포인터
    그리디
    우선순위큐
    재귀
    언리얼
    큐
    수학
    이벤트 트리거
    해시
    정렬
    dp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dubu0721
[집중 문제] it 취업을 위한 알고리즘 문제 풀이 입문 (With C/C++) 22. 온도의 최대값
상단으로

티스토리툴바