๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 10816๋ฒˆ : ์ˆซ์ž ์นด๋“œ 2 (C++, Python/Silver 4)

devCloud 2022. 9. 18. 23:09
728x90
 

10816๋ฒˆ: ์ˆซ์ž ์นด๋“œ 2

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” -10,000,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,

www.acmicpc.net

๋ฌธ์ œ
์ˆซ์ž ์นด๋“œ๋Š” ์ •์ˆ˜ ํ•˜๋‚˜๊ฐ€ ์ ํ˜€์ ธ ์žˆ๋Š” ์นด๋“œ์ด๋‹ค. ์ƒ๊ทผ์ด๋Š” ์ˆซ์ž ์นด๋“œ N๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ •์ˆ˜ M๊ฐœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ˆ˜๊ฐ€ ์ ํ˜€์žˆ๋Š” ์ˆซ์ž ์นด๋“œ๋ฅผ ์ƒ๊ทผ์ด๊ฐ€ ๋ช‡ ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” -10,000,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ์…‹์งธ ์ค„์—๋Š” M(1 ≤ M ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋„ท์งธ ์ค„์—๋Š” ์ƒ๊ทผ์ด๊ฐ€ ๋ช‡ ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ์ธ์ง€ ๊ตฌํ•ด์•ผ ํ•  M๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์ ธ ์žˆ๋‹ค. ์ด ์ˆ˜๋„ -10,000,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ M๊ฐœ์˜ ์ˆ˜์— ๋Œ€ํ•ด์„œ, ๊ฐ ์ˆ˜๊ฐ€ ์ ํžŒ ์ˆซ์ž ์นด๋“œ๋ฅผ ์ƒ๊ทผ์ด๊ฐ€ ๋ช‡ ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ ์ž…๋ ฅ

10
6 3 2 10 10 10 -10 -10 7 3
8
10 9 -5 2 3 4 5 -10

์˜ˆ์ œ ์ถœ๋ ฅ

3 0 0 1 2 0 0 2

ํ’€์ด
  • lower_bound(arr, arr+N, value) : value๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  • upper_bound(arr, arr+N, value) : value๊ฐ’์„ ์ฒ˜์Œ์œผ๋กœ ์ดˆ๊ณผํ•˜๋Š” ์›์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

โ€ป ์ž์„ธํ•œ ์„ค๋ช… - > [https://cocoon1787.tistory.com/324]

Solution

C++

#include <iostream>
#include <algorithm> //sort(), binary_search() ์“ฐ๊ธฐ ์œ„ํ•ด ํ•„์š”
using namespace std;

#define MAX 500000
int N, n[MAX], M, m[MAX], result[MAX] = {0,};

int main() {
    cin >> N;
    for(int i = 0; i < N; i++)
        cin >> n[i];
    
    sort(n, n+N); //์ด๋ถ„ ํƒ์ƒ‰์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ •๋ ฌ์ด ํ•„์š”
    cin >> M;
    for(int i = 0; i < M; i++)
        cin >> m[i];
    
    for(int i = 0; i < M; i++){
        if(binary_search(n, n+N, m[i])){ //์ด๋ถ„ ํƒ์ƒ‰์„ ํ†ตํ•ด์„œ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
            int high = upper_bound(n, n + N, m[i]) - n; //์ค‘๋ณต ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์Œ
            int low = lower_bound(n, n+N, m[i]) - n;
            result[i] = high - low;
        }
    }
    for(int i = 0; i < M; i++)
        cout << result[i] << ' ';
    return 0;
}

Python (sol1)

#128388KB / 2856ms
from sys import stdin
N = stdin.readline()
NCard = sorted(map(int, stdin.readline().split()))
M = stdin.readline()
MCard = map(int, stdin.readline().split())

def Binary_Search(x, NCard, start, end):
    if start > end:
        return 0
    mid = (start + end) // 2
    if NCard[mid] == x:
        return cnt.get(x) #dict.get(key, default = None)
    elif NCard[mid] > x:
        return Binary_Search(x, NCard, start, mid - 1)
    else:
        return Binary_Search(x, NCard, mid + 1, end)

cnt = { } #dictionary
for i in NCard:
    if i in cnt:
        cnt[i] += 1
    else:
        cnt[i] = 1

for i in MCard:
    print(Binary_Search(i, NCard, 0, len(NCard)-1), end = ' ')

Python (sol2)

#126568KB / 964ms
from sys import stdin
from collections import Counter #collections - ์ปจํ…Œ์ด๋„ˆ ๋ฐ์ดํ„ฐํ˜•
M = stdin.readline()
MCard = sorted(map(int, stdin.readline().split()))
N = stdin.readline()
NCard = map(int, stdin.readline().split())

C = Counter(MCard) #Counter({10: 3, -10: 2, 3: 2, 2: 1, 6: 1, 7: 1})
#print(C) #Dictionary ์ž๋ฃŒํ˜• ์ถœ๋ ฅ
#print(' '.join(f'{C[m]}' if m in C else '0' for m in NCard))
#์œ„์˜ print๋ฌธ ํ’€์–ด์“ฐ๋ฉด ์•„๋ž˜ for๋ฌธ ์ฒ˜๋Ÿผ ํ•˜๋ฉด ๋จ.
for m in NCard: #Counter(MCard)์— NCard์˜ ์š”์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅ
    if m in C:
        print(C[m], end= " ")
    else:
        print(0, end= " ")

โ€ป ์œ ์‚ฌ๋ฌธ์ œ - 10815๋ฒˆ ์ˆซ์ž ์นด๋“œ https://dev-cloud.tistory.com/101

728x90