glowing713
Frontend-Deep-Dive
glowing713
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (97)
    • Languages (11)
      • JavaScript πŸ’› (3)
      • Python 🐍 (4)
      • Java β˜•οΈ (3)
      • Swift 🧑 (1)
    • Computer_Science (1)
      • Computer_Network πŸ•Έ (1)
    • Web_Frontend (4)
      • Vue.js (1)
    • Problem_Solving (76)
    • Server (1)
      • Spring πŸ€ (1)
    • AI (2)
      • NLP πŸ—£ (1)
      • AI_Math βž— (1)
    • κ°œλ°œν™˜κ²½ κΎΈλ―ΈκΈ° ✌ (1)
    • 생각정리 ✍🏻 (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸ§‘πŸ»β€πŸ’»Github

곡지사항

인기 κΈ€

νƒœκ·Έ

  • boostcampaitech
  • BOJ
  • mst
  • 카카였 기좜
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • brute-force
  • Python
  • Baekjoon
  • 완전탐색
  • ps
  • Algorithm
  • 2019 카카였 개발자 겨울 인턴십
  • DP
  • λ™μ κ³„νšλ²•
  • Stack
  • binary search
  • c++
  • 이뢄탐색
  • Java
  • bfs

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
glowing713

Frontend-Deep-Dive

[BOJ] λ°±μ€€ 2503 숫자 야ꡬ / μ™„μ „ 탐색(Brute-force Search)
Problem_Solving

[BOJ] λ°±μ€€ 2503 숫자 야ꡬ / μ™„μ „ 탐색(Brute-force Search)

2020. 2. 24. 17:56

이미지λ₯Ό ν΄λ¦­ν•˜λ©΄ 문제 μ‚¬μ΄νŠΈλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.


πŸ’£ λ¬Έμ œ 이해

 

  • μ˜μˆ˜λŠ” 1μ—μ„œ 9κΉŒμ§€μ˜ μ„œλ‘œ λ‹€λ₯Έ 숫자 μ„Έ 개둜 κ΅¬μ„±λœ μ„Έ 자리 수λ₯Ό λ§ˆμŒμ†μœΌλ‘œ μƒκ°ν•œλ‹€. (예: 324)
  • λ―Όν˜μ΄λŠ” 1μ—μ„œ 9κΉŒμ§€μ˜ μ„œλ‘œ λ‹€λ₯Έ 숫자 μ„Έ 개둜 κ΅¬μ„±λœ μ„Έ 자리 수λ₯Ό μ˜μˆ˜μ—κ²Œ λ¬»λŠ”λ‹€. (예: 123)
  • λ―Όν˜μ΄κ°€ λ§ν•œ μ„Έ 자리 μˆ˜μ— μžˆλŠ” μˆ«μžλ“€ 쀑 ν•˜λ‚˜κ°€ 영수의 μ„Έ 자리 수의 λ™μΌν•œ μžλ¦¬μ— μœ„μΉ˜ν•˜λ©΄ 슀트라이크 ν•œ 번으둜 μ„Όλ‹€. μˆ«μžκ°€ 영수의 μ„Έ 자리 μˆ˜μ— 있긴 ν•˜λ‚˜ λ‹€λ₯Έ μžλ¦¬μ— μœ„μΉ˜ν•˜λ©΄ λ³Ό ν•œ 번으둜 μ„Όλ‹€.
  • 민혁이의 λ¬ΌμŒλ“€κ³Ό 각각의 λ¬ΌμŒμ— λŒ€ν•œ 영수의 닡이 μž…λ ₯으둜 μ£Όμ–΄μ§ˆ λ•Œ μ˜μˆ˜κ°€ μƒκ°ν•˜κ³  μžˆμ„ κ°€λŠ₯성이 μžˆλŠ” λ‹΅μ˜ 총 개수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

λ¬Έμ œμ— μ œμ‹œλœ λ‹€μŒκ³Ό 같은 쑰건듀을 μ •λ¦¬ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

 

1. μ˜μˆ˜μ™€ λ―Όν˜μ΄κ°€ μƒκ°ν•œ μˆ˜λŠ” μ„Έ 자리 수이고, 각 자리 μˆ˜λŠ” μ„œλ‘œ λ‹€λ₯Έ μˆ«μžμ΄λ‹€.

2. κ·œμΉ™μ€ ν”νžˆ μ•Œκ³ μžˆλŠ” μˆ«μžμ•Όκ΅¬μ™€ λ™μΌν•˜λ‚˜, λ¬Έμ œμ—μ„œ λ¬»λŠ” 것은 κ°€λŠ₯ν•œ λͺ¨λ“  숫자의 κ°œμˆ˜μ΄λ‹€.

 

숫자의 λ²”μœ„λ„ 그리 크지 μ•Šμ€ 111 ~ 999 이고, μ—°μ‚°λŸ‰μ΄ λ§Žμ§€ μ•Šμ•„

μ™„μ „ 탐색(Brute-force Search) 방식을 μ‚¬μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€.

 

πŸ’­ 풀이 κ³Όμ •

 

μž‘μ„± μ–Έμ–΄: C++

 

#include <iostream>
#include <string>
#include <vector>
#define NUMBERSIZE 3    // 숫자의 자리수(μ„Έμžλ¦¬ μˆ˜μ΄λ―€λ‘œ 3)
using namespace std;

// μž…λ ₯데이터λ₯Ό μ €μž₯ν•  ꡬ쑰체
typedef struct inpForm{
    string number; // 숫자
    int strike; // 슀트라이크 수
    int ball; // 볼 수
}INPFORM;

int arr[1000] = {0,};


int main(){
    INPFORM input; // μž…λ ₯데이터λ₯Ό μ €μž₯ν•  ꡬ쑰체 λ³€μˆ˜
    vector<INPFORM> inpVector; // ꡬ쑰체 λ³€μˆ˜λ₯Ό 담을 INPFORMν˜• 벑터
    int cnt, check, result = 0;
    cin >> cnt;
    
    // μž…λ ₯ 데이터 벑터에 μ €μž₯
    for(int i = 0; i < cnt; ++i) {
        cin >> input.number >> input.strike >> input.ball;
        inpVector.push_back(input);
    }
    
    /* 111~122, 988~999κΉŒμ§€λŠ” 쀑볡이 μžˆμœΌλ―€λ‘œ μ œμ™Έ
       123~987 λ²”μœ„μ—μ„œ 숫자 ν•˜λ‚˜ν•˜λ‚˜ 체크해본닀.
       질문 νšŸμˆ˜κ°€ 4번이라면 4λ²ˆμ„ λ‹€ ν™•μΈν•œλ‹€.
       각 질문의 숫자λ₯Ό i와 λΉ„κ΅ν•΄μ„œ strike, ball을 μΉ΄μš΄νŠΈν•˜κ³  μž…λ ₯의 strike, ballκ³Ό λΉ„κ΅ν•œλ‹€.
       ν˜„μž¬ 숫자 iκ°€ 4번의 μ§ˆλ¬Έμ—μ„œ λͺ¨λ‘ μΌμΉ˜ν•˜λ©΄ μ •λ‹΅μΉ΄μš΄νŠΈλ₯Ό 1 μ¦κ°€ν•œλ‹€. */
    for (int i = 123; i <= 987; ++i) {
        check = 0;
        string num = to_string(i);
        // μ„Έ μžλ¦¬μˆ˜μ€‘μ— ν•˜λ‚˜λΌλ„ μ€‘λ³΅λ˜κ±°λ‚˜ 0이면 패슀
        if(num[1] == '0' || num[2] == '0' || num[0] == num[1] || num[0] == num[2] || num[1] == num[2]) continue;
        
        for (int j = 0; j < cnt; ++j) {
            int stkCnt = 0, ballCnt = 0;
            
            for(int k = 0; k < NUMBERSIZE; ++k){    // 숫자의 각 μ„Έμžλ¦¬λ₯Ό 비ꡐ
                // μœ„μΉ˜μ™€ μˆ«μžκ°€ μΌμΉ˜ν•˜λ©΄ strike 카운트 증가
                if(num[k] == inpVector[j].number[k]){
                    stkCnt++;
                }
                // μœ„μΉ˜λŠ” λ‹€λ₯΄λ‚˜ μˆ«μžκ°€ μΌμΉ˜ν•˜λ©΄ ball 카운트 증가
                if(num[k] == inpVector[j].number[(k+1)%NUMBERSIZE] || num[k] == inpVector[j].number[(k+2)%NUMBERSIZE]){
                    ballCnt++;
                }
            }
            // strike와 ball μΉ΄μš΄νŠΈκ°€ μž…λ ₯κ³Ό λ™μΌν•˜λ©΄ μ •λ‹΅ 카운트 증가
            if(stkCnt == inpVector[j].strike && ballCnt == inpVector[j].ball){
                check++;
            }
        }
        // iκ°€ μ£Όμ–΄μ§„ μž…λ ₯데이터λ₯Ό λͺ¨λ‘ λ§Œμ‘±ν•˜λŠ” 수인 경우 κ²°κ³Όκ°’ 증가
        if(check == cnt){
            result++;
        }
    }
    
    cout << result << endl;
    
    
    return 0;
}

 

πŸ† 배운 점

 

브루트 포슀 방식이라고 해도 잘 감이 μ˜€μ§€ μ•Šμ•˜λ‹€. (더 효율적인 방법을 μ°Ύμ•„μ„œ κ³ λ―Όν•˜λŠ”λ° μ‹œκ°„μ΄ κ½€λ‚˜ κ±Έλ¦Ό..)

이번 문제λ₯Ό 톡해 ν™•μ‹€νžˆ 깨달은 것은,

 

 

브루트 ν¬μŠ€λŠ” 정말 μžˆλŠ” κ·ΈλŒ€λ‘œ ν•˜λ‚˜ν•˜λ‚˜ λ‹€ 확인해 λ³΄λŠ” 것이닀.

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'Problem_Solving' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] λ°±μ€€ 1182 λΆ€λΆ„μˆ˜μ—΄μ˜ ν•© / μ™„μ „ 탐색(Brute-force Search)  (0) 2020.02.26
[BOJ] λ°±μ€€ 1018 체슀판 λ‹€μ‹œ μΉ ν•˜κΈ° / μ™„μ „ 탐색(Brute-force Search)  (0) 2020.02.25
[BOJ] λ°±μ€€ 3085 사탕 κ²Œμž„ / μ™„μ „ 탐색(Brute-force Search)  (0) 2020.02.19
[BOJ] λ°±μ€€ 1011 Fly me to the Alpha Centauri  (2) 2020.01.07
[BOJ] λ°±μ€€ 2869 λ‹¬νŒ½μ΄λŠ” μ˜¬λΌκ°€κ³  μ‹Άλ‹€  (0) 2020.01.03
    'Problem_Solving' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [BOJ] λ°±μ€€ 1182 λΆ€λΆ„μˆ˜μ—΄μ˜ ν•© / μ™„μ „ 탐색(Brute-force Search)
    • [BOJ] λ°±μ€€ 1018 체슀판 λ‹€μ‹œ μΉ ν•˜κΈ° / μ™„μ „ 탐색(Brute-force Search)
    • [BOJ] λ°±μ€€ 3085 사탕 κ²Œμž„ / μ™„μ „ 탐색(Brute-force Search)
    • [BOJ] λ°±μ€€ 1011 Fly me to the Alpha Centauri
    glowing713
    glowing713

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”