문제 설명

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건
  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

입출력 예

arr1 arr2 return
[[1, 4], [3, 2], [4, 1]] [[3, 3], [3, 3]] [[15, 15], [15, 15], [15, 15]]
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

코드

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) 
{
    // arr1의 행,열
    int row_count1 = arr1.size();
    int col_count1 = arr1[0].size();
    
    // arr2의 열
    int col_count2 = arr2[0].size();
    
    // 2*3행렬 * 3*5행렬 = 2*5행렬
    vector<vector<int>> answer(row_count1, vector<int>(col_count2));
    
    int dump = 0;
    
    for(int k = 0; k < col_count2; k++)
    {
        for(int i = 0 ; i < row_count1; i++)
        {
            for(int j = 0; j < col_count1; j++)
            {
                 dump+=arr1[i][j]*arr2[j][k];
            }
            answer[i][k] = dump;
            dump=0;
        }
    }
    
    return answer;
}

 


문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

입출력 예

[[1,2],[2,3]] [[3,4],[5,6]] [[4,6],[7,9]]
[[1],[2]] [[3],[4]] [[4],[6]]

코드

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) 
{    
    int row_count = arr1.size();
    int col_count = arr1[0].size();
    
    vector<vector<int>> answer(row_count, vector<int>(col_count));
    
    for(int i = 0; i < row_count; i++)
    {
        for(int j = 0; j < col_count; j++)
        {
            answer[i][j]= arr1[i][j] + arr2[i][j];
        }
    }
    
    return answer;
}


1. vector container 란?

자동으로 메모리가 할당 되는 배열

vector 구조

 

2. vector의 사용

<vector> 헤더파일을 추가해야 한다.

using namespace std; 를 사용하면 편리하다. 

 

3. vector의 생성자

① vector<int> v;

 - 비어 있는 vector v를 생성

 

② vector<int> v(10);

 - 기본 값(0)으로 초기화 된 10개의 원소를 가지는 vector v를 생성

 

③ vector<int> v(10,5)

 - 2로 초기화 된 10개의 원소를 가지는 vector v를 생성

 

vecotr<int> v1(10,5);

     vector<int> v2(v1);

 - v1 vector를 복사해서 v2 생성

 

 * 연산자 "==", "!=", "<", ">", "<=", ">="로 대소 비교 가능

 

4. vector의 멤버 함수

* vector<int> v; 라고 가정

① v.assign(5,2); 

 - 2의 값으로 5개의 원소 할당

 

② v.at(index)

 - index번째 원소 return

 - v[index] 보다 속도는 느리지만, 범위를 점검하므로 안전

    v[index]

 - index번째 원소 return

- 범위를 점검하지 않으므로 속도가 v.at(index)보다 빠름

 

 v.front();

 - v의 첫번째 원소를 return

   v.back();

 - v의 마지막 원소를 return

 

 v.clear();

 - v의 모든 원소 제거

 - 원소만 제거하고 메모리는 남아있음 (size만 줄어들고, capacity는 그대로 남아있음)

 

v.push_back(7)

 - v의 마지막 원소 뒤에 7을 삽입

     v.pop_back()

 - v의 마지막 원소를 삭제

 

⑥ v.clear()

 - v의 모든 원소 제거

 - 원소만 제거하고 메모리는 남아있음 (size만 줄어들고, capacity는 그대로 남아있음)

 

v.begin()

 - v의 시작점의 주소 값 return

    v.end()

 - v의 마지막부분의 다음 주소 값 return

 

v.rbegin()

 - v의 끝 지점을 시작점으로 return

     v.rend()

 - v의 시작점 다음지점을 끝 부분으로 return

 

v.reserve(n)

 - n만큼의 capacity를 설정

 - n이 현재 capacity보다 클 때만 동작, 작으면 아무 일도 일어나지 않는다.

   v.resize(n)

 - size를 n으로 변경, 현재 size보다 n이 클 경우 인자의 값을 default값인 0으로 초기화

     v.resize(n,3)

 - size를 n으로 변경, 현재 size보다 n이 클 경우 인자의 값을 3으로 초기화

 

 

⑩ v.size()

 - v의 원소 갯수를 return

     v.capacity()

 - v의 할당된 공간의 크기를 return 

 

⑪ v2.swap(v1)

 - v1과 v2의 원소과 capacity를 바꿈(모든 걸 swap)

 

⑫ v.insert(2,3)

 - 2번째 위치에 3의 값을 삽입

 - 삽입한 곳의 iterator를 return

     v.insert(2,3,4)

 - 2번째 위치에 3의 값을 4개 삽입

 

 v.erase(index)

 - index가 가리키는 원소를 제거

      v.erase(start,end)

 - start이상, end 미만이 가르키는 원소를 제거

 

⑭ v.empty()

 - v가 비어있으면 return true

 


https://blockdmask.tistory.com/70

 

[C++] vector container 정리 및 사용법

안녕하세요.  BlockDMask 입니다. 오늘은 C++ STL의 sequence container 중에 정말 자주 쓰는 vector에 대해서 알아보겠습니다. <목차> 1) vector container 란? 2) vector의 사용 3) vector의 생성자와 연산..

blockdmask.tistory.com

 

*[개발자 지망생]님 블로그를 보고 공부하며 제가 보기 편하게 정리 한 글 입니다.*

'Study > C++' 카테고리의 다른 글

[C++] string 클래스 정리  (0) 2021.10.29

[원서 접수 기간]

2022년 1월 10일(월) 10:00 ~ 2022년 1월 11일(화) 09:00

원서접수 : https://www.historyexam.go.kr/

[사진등록 기간 및 시험장 변경 기간]

※ 2022년 1월 18일(화) 10:00 ~2022년 2월 12일(토) 10:00

※ 시험장 변경 기간(2022년 1월 18일(화) 10:00 ~ 2022년 2월 6일(일) 18:00) 내에만 시험장 변경 가능

[시험일]

2022년 2월 12일(토) 10:00

[시험종류 및 인증 등급]

[시험 준비물]

[시험 시간]

 

'땡땡 > 정보' 카테고리의 다른 글

2022년 제 3회 정보처리 기사  (0) 2022.04.29
제 59회 한국사능력검정시험  (0) 2022.04.29
2022년 정보처리기사  (0) 2021.12.29

[ 제 1회 시험일정 ]

구분 필기
원서접수
필기
시험일
필기
합격자
발표일
실기
원서 접수
실기
시험일
실기
합격자
발표일
1회 1월24일(월)
~1월27일(목)
3월5일(토) 3월23일(수) 4월4일(월)
~4월7일(목)
5월7일(토)
~5월20일(금)
6월17일(금)

*원서접수 : 2022년 1월24일(월) 10:00 ~ 2022년 1월27일(목) 18:00 

https://www.q-net.or.kr/crf005.do?id=crf00505&jmCd=1320

 

 

[ 시험과목 및 시험방법 ]

구분 시험과목 시험시간 검정방법 합격기준
필기 1. 소프트웨어설계
2. 소프트웨어개발
3. 데이터베이스구축
4. 프로그래밍언어활용
5. 정보시스템구축관리
과목당 30분
(총 2시간 30분)
객관식 4지 택일형
과목당 20문항
(총 100문항)
100점 만점 중
과목당 40점 이상,
전과목 평균 60점 이상 
실기 정보처리 실무
1. 현행시스템분석 및 
   요구사항확인
2. 데이터입출력 구현
3. 통합구현
4. 서버프로그램 구현
5. 인터페이스 구현
6. 화면 설계
7. 애플리케이션테스트
8. SQL 응용
9. 소프트웨어 개발보안구축
10. 프로그래밍언어활용
11. 응용SW기초기술활용
12. 제품소프트웨어패키징
2시간 30분 필답형 100점 만점 중
60점 이상

'땡땡 > 정보' 카테고리의 다른 글

2022년 제 3회 정보처리 기사  (0) 2022.04.29
제 59회 한국사능력검정시험  (0) 2022.04.29
2022년 제57회 한국사능력검정시험  (0) 2022.01.01

https://jeak.tistory.com/233

 

MFC MoveWindow - 컨트롤 위치 및 크기 변경

MFC MoveWindow MFC에서 사용하는 control들의 위치와 크기를 변경하는 movewindow함수에 대해 알아보겠습니다. 1 2 3     void MoveWindow(int x, int y, int nWidth, int nHeight,         ..

jeak.tistory.com

 

https://balabala.tistory.com/45?category=947457 

 

[MFC] 채팅 프로그램 - 클라이언트 (2/3)

- 설명 - 프로젝트 명 : ChatClient(대화 상자) ① CSocket 클래스 이용 : 동기식(블로킹)으로 동작 ② 서버 클라이언트 1:1 통신 ③ 해당 글은 클라이언트 채팅 프로그램 만드는 법 설명 1. MFC 애플리케이

balabala.tistory.com


[따라하다가 안되던 부분들]

2. 다이얼로그 디자인 및 ID

형식을 CString 으로 하니 에러가 나서 CEdit, CStatic으로 변경했다. 

Control을 다루는 부분도 형식에 따라서 변경했다.

그림3. 멤버변수 설정

 

7. [접속] 및 [전송] 버튼 클릭 메시지 함수 작업

위 작업대로 형식에 맞게 메세지 함수 소스 코드 수정

void CChatClientDlg::OnBnClickedButtonConnect()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	CString strIP;

	UpdateData(TRUE);
	m_socCom.Create();

	m_strIP.GetWindowText(strIP);

	// IP 주소와 포트 번호를 지정
	m_socCom.Connect(strIP, 5000);
	m_socCom.Init(this->m_hWnd);

}

void CChatClientDlg::OnBnClickedButtonSend()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	UpdateData(TRUE);
	char pTmp[256];
	CString strTmp, strText;
	CStringA strTextA;

	m_strSend.GetWindowText(strText);

	strTextA = CStringA(strText);

	// pTmp에 전송할 데이터 입력
	memset(pTmp, '\0', 256);
	memcpy(pTmp, strTextA.GetBuffer(), strTextA.GetLength());
	m_strSend.Clear();

	// 전송
	m_socCom.Send(pTmp, 256);

	// 전송한 데이터도 리스트박스에 보여준다.
	strTmp = pTmp;
	int i = m_list.GetCount();
	m_list.InsertString(i, strTmp);

	UpdateData(FALSE);
}

https://snowbora.tistory.com/369

 

[C++] MFC에서 CEdit 사용하기

MS Visual Studio를 사용해서 간단한 어플리케이션 프로그래밍을 할 때, 단순히 버튼(Button)이나 텍스트 박스(TextBox) 등을 만들고 간단한 함수 등을 맵핑해서 쓰는 경우가 많습니다. 기존에 Visual C++을

snowbora.tistory.com

 

+ Recent posts