Algorithm 30

[백준] 11720번 : 숫자의 합 구하기 - C/C++

문제 풀이 과정은 아래와 같다.1. 숫자의 개수 N 입력2. 공백 없이 N개의 숫자 입력3. 문자열 --> 숫자형 변환 1번과 2번 과정은 쉽게 해결할 수 있을 것이다.백준 11720번을 해결하는 핵심은 다음과 같다.  문자열을 숫자형으로 변경하려면 아스키코드(ASCII)를 이해해야한다는 것이다.아스키코드에서 같은 의미의 문자와 숫자의 코드값 차이는 48이다.문자열 '1'은 아스키코드 값으로는 49 이기 때문에숫자 1로 변환하기 위해서는 -48 혹은 -'0'의 연산이 필요하다. 필자는 -48 대신 -'0'을 선택했다.아래는 str[i]를 정수로 계산하여 sum에 누적하는 방법의 코드이다.sum += str[i]-'0';  전체 코드#include #include //숫자의 합using namespace ..

Algorithm 2025.03.04

[자료구조] 배열과 리스트 그리고 벡터

코딩 테스트에서 주어진 문제를 해결하기 위해서는사용해야할 알고리즘 그리고 자료구조가 중요하다.필자는 자료구조에 대한 정리글을 써보려한다.  백준에서 문제를 해결하면서, 혹은 강의를 들으면서배열과 리스트는 똑같은 개념이 아닌가? 하며매일 헷갈렸다.이번 기회에 그 개념을 바로 잡아보자.  배열메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조배열의 값은 인덱스를 통해 참조선언한 자료형의 값만 저장 가능배열의 특징인덱스를 사용하여 값에 바로 접근 가능새로운 값을 삽입하거나 특정 인덱스에 있는 값 수정 어려움.값을 삽입하거나 삭제하려면 해당 인덱스 주변에 있는 값을 이동시켜야 함.배열의 크기는 선언할 때 지정.한번의 선언 가능, 크기를 늘리거나 줄일 수 없음.구조 간단   리스트: 값과 포인터를 묶은 노드를..

Algorithm 2025.03.04

[백준] 2167번 : 2차원 배열의 합 - C/C++

문제 해결 과정은 아래와 같다.1. 배열 입력2. 합을 구할 K 입력 받고 정수 네 개 입력 받기3. 합 구하기  벡터를 이용하여 동적으로 2차원 배열을 생성할 것이다.vector> ary(n + 1, vector(m + 1, 0)); ary[n+1][m+1] → (1-based index)로 사용하기 위해 입력받은 n,m을 각각 1씩 증가시킨다누적합 계산을 쉽게 하기 위해서 모든 값을 0으로 초기화 시킨다. -2차원 누적합(prefix sum)???수들의 나열에서 특정 구간의 합을 의미하는 prefix sum은보통은 1차원 배열에서 i부터 k 인덱스 사이의 값을 구하는 데에 이용된다. 부분합은 아래와 같이 코드를 작성할 수 있다.for (int i = 1; i > num; ary[i][j] =..

Algorithm 2025.03.03

[백준] 10814번 : 나이순 정렬 - C/C++

내가 생각한 문제 해결 순서는 아래와 같다. 1. 회원수 n 입력하기2. 회원의 나이와 이름 입력하기3. 나이순으로 출력하기 문제는 간단했는데이걸 2차원배열로 입력으로 받아버리면.. 시간 초과가 뜰 것 같았다. 그래서 방법을 생각하다가얼마전 알고리즘 강의에서 배운 pair 를 사용해보기로 했다. pair 선언은 아래처럼 할 수 있다.vector> vector; -pair??pair 가 기본 구조이다.특징은 아래와 같다. 저장한 값은 .first 그리고 .second로 접근할 수 있다.2개의 값을 순서쌍 형태로 저장할 수 있다.정렬에 용이하게 사용된다. 우리는 입력 받은 n 만큼의 쌍을 입력 받아야하니까for 문을 돌려준다.for (int i = 0; i > num >> str; vector.empl..

Algorithm 2025.03.02

[백준] 2947번 : 나무 조각 - C/C++

문제를 읽고 어떻게 접근해야할지 생각했는데생각보다 간단했다. 입력을 받고, 첫 번째와 두 번째 수를 비교하고 그 다음 수를 비교하고..근데 문제가 생겼다. 동작이 잘 될 줄 알고if문으로 구현했는데 한 번씩만 인접한 배열을 비교하는 것이었다. 결국 출력은 아래처럼.. 나오게 된다.틀렸다는 뜻. 간단하다고 말했던 걸 후회한다.나는 풀이과정을 다시 생각해야했다.. 많은 고민을 하다가 if문이 아닌 다른 방법이 있을까.. 했는데bubble sort(버블 정렬)이 생각났다. 버블 정렬로 풀어보자.버블 정렬의 핵심은 다음과 같다. 버블 정렬은 인접한 두 개의 원소를 비교하여, 마지막 원소까지 늘려가며 정렬하는 알고리즘이다. 알고리즘은 아래의 4단계를 거쳐 실행된다. 1. 첫 번째 원소와 두 번째 원소 비교2. 첫..

Algorithm 2025.03.01

[백준] 10817번 : 세 수 - C/C++

문제를 보자마자 어떻게 풀어야할지 생각이 딱 난다면,,,그건 구현 문제일 가능성이 크다.(정말 개인적인 생각) 문제에서 말하는 대로 따라가면 지난번 글과 같이 쉽게 해결 가능하다. 두 가지 방식으로 위의 문제는 해결 가능하다. 1. int형으로 정수 A,B,C 입력 받아서 비교하기2. int형의 배열에 값 입력받아서 정렬 후 비교하기 다른 방법이 있을 수 있겠다만 나는 두 가지 밖에 생각이 안 났다.  문제에서 두 번째로 큰 정수를 출력하라고 했다.1번 방식으로 풀게 되면 if문을 사용해서 수를 직접 비교해야겠지만,2번 방식으로 풀게 되면 정렬해서 풀 수 있다. 나는 복잡한 건 싫다.내장함수를 최대한 활용하겠다.2번 방식으로 풀어보자. 배열에 값 입력하기int ary[3]; for(int i=0;i..

Algorithm 2025.02.28

[백준] 2744번 : 대소문자 바꾸기 - C/C++

여러가지 상황이 복잡하게 섞여있는 문제가 아니라 그냥 구현만 하면 되는 문제.머릿속에서 '이렇게 하면 되겠다' 라는 생각이 바로 떠올랐다.바로 떠오를 것도 없다.문제를 따라가면 되니까..  순서는 다음과 같다.1. 배열로 문자열 입력 받기2. 소문자 대문자 전환해주기3. 결과 출력    문제에서 단어 길이는 최대 100이라고 했으니, 아래처럼 설정해주자.char st[101];cin >> st;입력도 받았다면, 검증하기.  지난 글에서도 다루었지만, 알파벳은 아스키(ASCII) 코드로 저장된다.특정 알파벳은 특정 숫자와 매칭된다는 것이다.대문자와 소문자는 정확히 32라는 차이가 난다.코드로 구현해보자.for(int i=0;i= 'A' && st[i] = 'a' && st[i]   이런.. 너무나 쉽게 ..

Algorithm 2025.02.27

[백준] 2693번 : N번째 큰 수 - C/C++

문제를 읽고 해결 과정을 순차적으로 생각해 보았다. 1. 입력받고자하는 테스트 케이스 N 입력2. 크기가 10인 배열 선언3. 반복문을 돌면서 배열에 값 넣기4. 오름차순 혹은 내림차순으로 정렬5. 결과 출력    문제 풀이 시작.테스트 케이스 입력과 크기 10인 배열 선언고정된 크기의 배열 aryint n;int ary[10];  반복문을 돌며 배열에 값은 입력하면 아래와 같다.for(int i=0;i> ary[j]; }}  배열에 값을 입력했으니, 정렬을 해야한다.정렬은 sort( , , ) 를 통해 구현할 수 있으며,c++에서의 sort는 quick sort(퀵 정렬)로 설정되어있다.#include ...sort(ary,ary+10); 기본이 오름차순이기 때문에 우리는 출력할 때 주의해야한다...

Algorithm 2025.02.26

[백준] 2577번 : 숫자의 개수 - C/C++

문제를 보고 어떻게 풀까, 고민을 했다.해결 과정은 아래와 같다. 1. int 형으로 A,B,C 3개의 수를 입력 받기2. 세 수의 곱셈 연산 수행3. 결과 값을 string으로 바꾸기4. 배열을 순회하며 숫자 개수 세기5. 결과 출력  내가 마주한 고비는 연산한 Int형 정수를 어떻게 string으로 바꾸어야 하는지부터 시작했다. 근데 진짜 쉽다.을 include 해주고, 원하는 값을 to_string(); 안에 넣어주기만 하면 된다.#include ...int main(){ int a,b,c; cin >> a >> b >> c; int mul; mul = a*b*c; string mulStr = to_string(mul);...} 그럼 다음 순서.배열을 순회하며 0이 몇 번, 1부터 9까지 각..

Algorithm 2025.02.25