알고리즘 공부 3

lsh235·2024년 10월 9일
0

CodingTest

목록 보기
10/31

Array

문제 : 백준 1475-방 번호

생각한 구현 내용

  1. 입력받은 숫자를 반복하여 해당하는 aray[10]의 인덱스에 각각 1씩 더한다.
  2. 9와 6은 같이 사용 가능하므로 9와 6의 인덱스는 합쳐 반으로 나눈다.
  3. array중에서 제일 높은 숫자가 정답.

알게 된 점

  1. array에서 n크기 구하는법
ex) d가 int일 경우에 전체 5개가 존재한다면 전체 사이즈 : 20, 한개 사이즈 : 4
    전체 사이즈(20) / 한개 사이즈(4)
int n = sizeof(d) / sizeof(d[0])
  1. array에서 max index에 해당하는 값 구하는법(for 문으로도 가능 성능 비슷)
int d[10] = {1, 5, 3, 9, 2};
int max = *max_element(d, d + 10);

std::vector<int> vec = {1, 5, 3, 9, 2};
auto max_it = std::max_element(vec.begin(), vec.end());

문자열도 가능하고 아래와 같이도 사용가능

struct Person {
    std::string name;
    int age;
};

// 비교 함수: 나이를 기준으로 비교
bool compareAge(const Person& a, const Person& b) {
    return a.age < b.age;
}

std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}};  // 벡터에 Person 객체들 추가
// 최대값 찾기: age를 기준으로 가장 나이가 많은 사람 찾기
auto oldest = std::max_element(people.begin(), people.end(), compareAge);

각 행에서 최대값 찾는 방법

int matrix[3][3] = {
	{1, 2, 3},
	{4, 5, 6},
	{7, 8, 9}
};

for (int i = 0; i < 3; ++i) {
	int* max_ptr = std::max_element(matrix[i], matrix[i] + 3);
    std::cout << "Max element in row " << i + 1 << ": " << *max_ptr << std::endl;
}

구현코드

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int N;
    cin >> N;
    int d[10] = { 0 };
    while (N > 0)
    {
        d[N % 10] += 1;
        N /= 10;
    }

    int t = d[6] + d[9];
    d[6] = t / 2;
    d[9] = t - d[6];

    std::cout << *max_element(d, d + 10) << std::endl;
    return 0;
}

0개의 댓글