Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 1188 java
- 14711 java
- 2661 좋은 수열
- APPEND_SLASH = FALSE
- 2661 java
- 18233 비트마스킹
- The requested operation has failed!
- java di
- 2961 도영이가 만든 맛있는 음식
- 14711 타일 뒤집기
- django 웹 페이지
- django 프로젝트 시작
- 18233 java
- 공유기 원격 설정
- windows apache wsgi 에러
- django windows 배포 에러
- 2961 java
- django httpd error
- django
- 2643 색종이 올려 놓기
- django apache deploy error
- windows 원격 연결 설정
- 2643 java
- apache pythonpath
- 1188 음식 평론가
- django settings.py
- Problems occurred while performing provisioning operation
- 18233 러버덕
- django The requested operation has failed!
- 원격 연결 포트 포워딩
Archives
라이브러리는 도서관 아닌가요
백준 (BOJ) 2776 암기왕 java 본문
https://www.acmicpc.net/problem/2776
이분 탐색 / 해시 문제이다.
탐색할 때 배열을 사용하지 않는 실수를 범해서 어처구니 없이 많이 틀린 문제
이분 탐색 풀이
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
int N, M;
int[] arr;
for(int t=0; t<T; ++t) {
// 수첩 1
N = Integer.parseInt(br.readLine());
arr = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; ++i) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
// 수첩 2
M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < M; ++i) {
int key = Integer.parseInt(st.nextToken());
boolean flag = false;
int l = 0;
int h = N-1;
int mid;
while (l <= h) {
mid = (l + h) >> 1;
// 탐색한 값이 키 값 보다 작다면,
if (arr[mid] < key) {
l = mid + 1;
}
// 크거나 같거나 크다면,
else if(arr[mid] > key){
h = mid - 1;
}
else{
flag = true;
h = mid - 1;
}
}
if (flag) {
// bw.write("1\n");
sb.append("1\n");
}
else {
// bw.write("0\n");
sb.append("0\n");
}
}
}
System.out.print(sb);
// bw.flush();
// bw.close();
// br.close();
}
}
해시맵 풀이
import java.io.*;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int T, N, M;
T = Integer.parseInt(br.readLine());
for(int t=0; t<T; ++t){
N = Integer.parseInt(br.readLine());
// 테케마다 새로운 해시맵을 써야 한다.
HashMap<Integer, Integer> map = new HashMap<>();
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; ++i){
map.put(Integer.parseInt(st.nextToken()), 1);
}
M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i=0; i<M; ++i){
if(map.containsKey(Integer.parseInt(st.nextToken()))){
sb.append("1\n");
}else{
sb.append("0\n");
}
}
}
System.out.print(sb);
}
}
아래는 시간초과에 의해 탄생한 산출물 C, C++
아주 C++ 답지 않은 코드이다.
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void){
int T, N, M;
int tmp;
scanf("%d", &T);
for(int t=0; t<T; ++t){
scanf("%d", &N);
vector<int> v;
for(int i=0; i<N; ++i){
scanf("%d", &tmp);
v.push_back(tmp);
}
sort(v.begin(), v.end());
int l, h, mid, key;
bool flag;
scanf("%d", &M);
for(int i=0; i<M; ++i){
scanf("%d", &key);
flag = false;
l = 0, h = N-1;
while (l <= h) {
mid = (l + h) >> 1;
// 탐색한 값이 키 값 보다 작다면,
if (v[mid] < key) {
l = mid + 1;
}
// 크거나 같다면,
else if(v[mid] > key){
h = mid - 1;
}
else{
flag = true;
h = mid - 1;
}
}
if(flag) printf("%d\n", 1);
else printf("%d\n", 0);
}
}
return 0;
}
'알고리즘 문제' 카테고리의 다른 글
백준 (BOJ) 1166 선물 java (0) | 2022.04.08 |
---|---|
백준 (BOJ) 1072 게임 java (0) | 2022.04.06 |
백준 (BOJ) 15810 풍선 공장 java (0) | 2022.04.05 |
백준 (BOJ) 10815 숫자 카드 java (0) | 2022.03.25 |
백준(BOJ) 2133 타일 채우기 java (0) | 2022.03.21 |
Comments