1940 - 주몽

재찬·2023년 1월 12일
0

Algorithm

목록 보기
14/64

문제

오답 코드

#include <bits/stdc++.h>
using namespace std;

int main(){
	int m, n;
	string s;
	int ret = 0;
	string arr[15001];	
	string f[15001];
	int tmp;

	cin >> m;
	cin >> n;
	
	for(int i = 0; i < m; i++){
	cin >> arr[i];	
	}
	
	for(int i = 0; i < m; i++){
		tmp = stoi(arr[i]);
		f[i] = to_string(n - tmp);
	}
	
	for(int i = 0; i < m; i++){
		auto it = find(begin(arr), end(arr), f[i]);
		if(it != end(arr)){
			ret++;
		}
	}
	ret = ret / 2;
	cout << ret;
}

정답 코드

#include <bits/stdc++.h>
using namespace std;

int n, m, a[15001], cnt;

int main(){
 	cin >> n >> m;
	for(int i = 0; i < n; i++){
		cin >> a[i];
	}	
	
		for(int i =0; i <n; i++){
			for(int j = i +1; j <n; j++){
				if(a[i] + a[j] == m){
					cnt++;
				}
			}
		}

	cout << cnt <<'\n';
}

풀이

첫번째 분석

합이 n이 나와야 하니까 n에서 입력 값을 뺀다.
그 값들로 배열을 만들어서 원래 배열에서 이 배열을 find로 검색해본다.
find는 문자열로만 가능하니까 입력 값들은 모두 문자열로만 한다.
검색하면 값이 원하는 값의 2배가 나오니 2로 나눠서 출력하면 된다고 생각했다.
뭔가 값을 수정하는 것도 많고 조합으로 할 수 있을듯 해서 수정해봤다.

두번째 분석

15000개까지 입력을 받아야 하니 이중 for문으로 조합을 구현하는건 불가능하다고 생각했다.
근데 막상 구현해보니 시간이 훨씬 적게 들어갔다.

결과

후기

언제는 간단하게 해야 맞고 언제는 빡세게 구현을 해야 맞는다.
이번엔 좀 빡구현해야 맞을거 같았는데
간단한 수식을 쓰는게 좀 더 이득이었다.
하지만 이 문제 역시 조건 맞추고 알맞은 함수로 구현한다는 본질을 벗어나진 않은 느낌이었다.

0개의 댓글