분류 전체보기 387

올바른 괄호 - 프로그래머스, c++

괄호 검사 문제는 스택을 사용해야 한다. (괄호의 종류가 "(", "{", "[" 중 얼마나 있냐에 따라 코드의 내용은 조금씩 달라지지만 전체적인 틀은 같다.) 왼쪽 괄호는 스택에 들어가는 역할을 하고 오른쪽 괄호일 경우 왼쪽 괄호가 스택안에 있냐 없냐를 체크하고 상황에 맞게 스택 안의 왼쪽 괄호를 pop 해주면 된다. - 문제 풀이 1. 문자열 s 길이만큼 for문을 돌며 "(", ")"에 따라 스택을 사용한다. 2. for문 안에서 → 만약 현재 인덱스가 가르키는 문자가 "(" 라면 스택에 넣는다. → 만약 현재 인덱스가 가르키는 문자가 ")" 라면 스택 안의 상황을 보고 스택 안의 "("를 pop한다. - 코드 다음과 같이 간단하게 구현하여 성공했다. (+ 스택 선언 하는 방법: stack s;) ..

프로그래머스 2023.01.10

개인정보 수집 유효기간 - 프로그래머스, c++

- 문제 풀이 1. 주어진 문자열들을 split하여 년, 월, 일 별로 저장해둔다. (여기서 map을 사용하면 더 간단해짐) 2. 날짜가 말일(28일)이거나 하는 경우를 고려하여 개인정보 유효 날짜를 구한다. 3. 오늘 날짜와 비교하여 개인정보 유효 날짜가 오늘 날짜보다 더 이르면 "answer" vector에 현재 인덱스를 저장한다. - 내가 작성한 코드 이 코드는 처음에 작성한 코드이다. 처음엔 이렇게 stoi() 함수를 사용하여 작성했다. 아직 아는 함수나 요령들이 많지 않아 기초적으로 접근했는데, 이런 방식으로 논리상의 오류는 없이 코드를 짜면 좋겠다만 경우의 수를 직접 모두 고려해주어야 해서 코드가 복잡해지는 어려움이 생겼다. 역시 미리 "." 나 " "을 기준으로 split해 문자열을 년, 월..

프로그래머스 2023.01.10

같은 숫자는 싫어 - 프로그래머스, c++

- 문제 풀이 #include 을 통해 벡터로 큐를 구현한다. #include 을 사용하면 #include 없이도 바로 큐를 다루는 push등의 명령어를 사용할 수 있다. + 명령어 종류: push_back(n), pop_back(), insert(n,n), begin(), erase(n,n+2), swap(n) 첫번째 배열의 정수는 미리 큐에 넣어준 후 인덱스 1부터 for문을 통해 고려한다. 만약 바로 앞 인덱스에 들어있는 정수와 현 인덱스에 들어있는 정수가 다를 경우만 큐에 현 인덱스의 정수를 넣어준다. - 코드 #include #include using namespace std; vector solution(vector arr) { vector answer; answer.push_back(arr[..

프로그래머스 2023.01.08

옹알이 (1) - 프로그래머스, c++

- 문제 풀이 #include 이 가지는 명령어를 사용하는 것이 중요. ~~.substr(0,0) 명령어를 통해 문자열 안의 부분 문자열에 우리가 원하는 단어가 있는 지 확인하도록 해야 했다. vector 안의 모든 string들은 하나씩 고려해주기 위해 for문을 써준 후 그 안에는 각 string을 고려해야 했으므로 또 for문을 사용한다. 발음이 되는 경우만 bool 형의 word 변수를 통해 answer의 값을 ++ 증가시키도록 했다. - 코드 #include #include using namespace std; int solution(vector babbling) { int answer = 0; for(int i=0; i

프로그래머스 2023.01.07

[Project - 기말 발표]

1. 문제 소개 → 문제 소개 “쓰레기 집수 풀"에 모인 쓰레기들을 비워내기 위해 Kruskal 알고리즘을 이용해 최소 비용으로 모든 노드를 연결하기 → 기술 소개 및 문제 선정 이유 바다의 플라스틱(쓰레기)는 3분의 2이상이 강이나 하천에서부터 흘러온다. 이를 막기 위해서는 더이상 쓰레기가 흘러 바다로 오지 않도록 하천 쪽에 쓰레기 수거망을 설치해야한다. 42,000kg의 쓰레기를 모을 수 있는 쓰레기 배를 여러대 곳곳에 배치한다. 또 그 옆쪽으로는 거품 장벽을 배치해 쓰레기 조각이 기포에 걸려 표면으로 밀려나고, 그곳에서 물살에 의해 집수 풀(쓰레기 배)로 운반될 수 있도록 하는 기술이다. 이렇게 쓰레기 배(집수 풀)에 모인 쓰레기들은 모아서 다시 육지로 수거해 가야 한다. 이때 모든 노드를 최소 비..

[13주차 과제]

1. 벨만포드 알고리즘 정리 → 벨만포드 알고리즘이란 컴퓨터 알고리즘 접근 방법에는 2가지가 있다. 첫째는 greedy하게 접근하는 방식이고, 둘째는 영토를 점차 넓혀가는 방법이다. 이는 분할정복이라고도 하며 아는 노드부터 차근차근 짚고 넘어가는 방법이다. 아직 다음 노드에 대한 거리를 모를 땐 긴장상태라고 하고, 값을 알아내 갈 수록 relax 한다고 표현한다. 그리고 지금 살펴볼 "벨만포드 알고리즘"은 바로 이 두번째 방법을 사용해 돌아가는 알고리즘이다. 다음 노드에 대한 거리를 모르지만 하나씩 알아가며 relax 해주는 방식이다. 이 설명을 읽으면 알겠다시피 다익스트라 알고리즘보단 덜 직관적이다. → 벨만포드 알고리즘 원리 벨만포드 알고리즘(Bellman - ford): 음의 가중치도 계산할 수 있..

[12주차 과제]

1. 그래프 표현 방법 ● 인접 행렬을 이용한 그래프 구현 → 위의 그림처럼 정점 0과 정점 1이 연결되어 있다면 행렬 상의 (1,0)의 값을 1로 바꾸어 연결 되었음을 나타낸다. 만약 두 정점과 연결이 없다면 행렬 상의 값을 0으로 설정해 연결이 안 되어있음을 나타낸다. 행렬이 대칭을 이루면 무방향 그래프이다. 대칭 여부에 따라 방향/무방향 그래프를 구분 할 수 있다. → 인접행렬 그래프를 구현한 class를 선언 인접행렬로 사용할 행렬을 선언 그래프의 간선 정보를 입력 또는 반환할 수 있는 함수를 각각 선언 그래프의 정점 정보를 입력 또는 반환할 수 있는 함수를 각각 선언 저장한 간선, 정점 정보들을 dis..

[9주차 과제]

1. 그래프 예시를 직접 만들기 2. BFS와 DFS 알고리즘을 바탕으로 그래프 탐색 과정을 그리기 BFS는 넓이 우선 탐색으로, 한 노드에서 가장 인접한 노드를 탐색하고, 또 그 다음 노드들과 가장 인접한 노드들을 탐색해가는 알고리즘이며, DFS는 깊이 우선 탐색으로, 미로 찾기처럼 한 노드를 정해 그 노드가 연결된 곳을 쭉 따라가 더이상 갈 곳이 없으면 다음 노드를 탐색하는 알고리즘이다. 자세한 탐색 과정은 아래 설명을 통해 확인해보겠다. 1) 시작은 7부터 시작한다. 7을 큐에 넣는다. 2) 큐에 있는 숫자를 꺼내며 탐색을 시작한다. - 7과 인접한 4, 5, 6, 10노드를 큐에 넣는다. 7은 방문했음으로 표시하고 큐에서 빼낸다. - 큐에 들어있는 4 노드에 대하여 탐색한다. 4와 인접한 2, 3..

[MID] 중간 프로젝트

1. 데이터 소개 - 총 102개의 쓰레기 이미지 데이터 셋 - 데이터 수집 일시: 2022년 10월 14일 ~ 2022년 10월 15일 - 죽전역 탄천 용인 성복천 일대의 하천 주변 쓰레기 이미지 수집 - (Rubbish, Plastics, Cans, Glass, Papers) 5종류의 쓰레기 이미지 수집 2. 데이터 공유 방법 소개 - 쓰레기 이미지 데이터 셋 → dataset_image.zip 파일 첨부 (각각은 .jpg 파일) 파일 크기가 커서 반반씩 나눠 두개의 zip 파일로 올림 → 총 102개의 이미지 파일 (. jpg) - 쓰레기 이미지 데이터셋을 csv파일로 정리함 → data.csv 파일 첨부 → 이미지 크기: 1280(pixel) X 1280(pixel) → 위도(Latitude), ..

[4주차 과제]

1. Data structures augmentation 코딩 ● Rank 구현 (1) - Rank 함수 숫자와 목록을 만들고 그에 해당하는 오름차순, 내림차순을 결정하여 목록에 해당하는 순위값을 자동으로 출력하는 함수 위의 이미지 처럼 값들이 쭉 입력된 목록이 있고 크기 순으로 rank(순위)를 매기는 목록이 있음. - Rank(순위) 알고리즘 or 등수 알고리즘 주어진 자료 중에서 순위(등수)를 구할 때 사용함. 모든 점수는 처음에는 1등으로 설정한 후 해당 점수보다 큰 점수가 나타날 때마다 등수를 1씩 증가시켜 순위를 낮추는 것(등수가 밀리는 것)이 핵심 로직. - C#을 통한 Rank 알고리즘 구현 using System; using System.Linq; class RankAlgorithm { ..