반응형

C++ 383

백준 2902번 KMP는 왜 KMP일까? C++

리뷰stringstream과 getline 메서드를 처음으로 알게 된 문제, 파이썬이라면 split으로 금방 풀 수있겠지만 C++은 너무 불친절한 느낌.. 문제 풀이문자열을 입력 받고 해당 문자열을 stringstream 타입의 변수로 생성해 준다.정답을 출력할 문자열과 임시로 받아올 문자열을 각각 빈 문자열로 초기화 해준다.while 루프를 돌며 -을 기준으로 문자열을 분리하고 각각 문자열의 첫번째 문자만 정답 문자열에 더해준다.while 루프가 종료된 후 정답 문자열을 출력해 준다. 참고 사항getline함수는 통해 문자열이 반환되었을 경우 true, 더이상 반환할 문자열이 없을 경우 false를 리턴한다.  정답 코드#include #include #include using namespace std..

백준 13549번 숨바꼭질 3 파이썬, C++

리뷰BFS를 통한 풀이, 기존 숨바꼭질 보다 조건이 추가되었다, 순간 이동 시 소요되는 시간이 사라졌음 문제 풀이n, k값을 입력 받고 bfs의 인자로 n, k , 0을 보내준다.while루프를 돌기 전에 큐에 현재 위치와 시간 정보를 담아주고 100001 크기의 방문 배열을 false로 초기화 한다.현재 위치를 true로 설정하고 while루프를 시작한다.이동할 수 있는 위치는 총 세가지다 x - 1, x + 1, x * 2 이 중 순간이동을 하는 경우는 시간이 소요되지 않는다.시간을 소요하지 않는 순간이동을 가장 먼저 수행 후 조건에 맞다면 큐에 넣어준다.이후 뺄셈, 덧셈 순으로 조건이 맞을 경우 큐에 추가해 준다.bfs종료 후 리턴값을 출력하면 된다. 참고 사항덧셈과 곱셈을 할때 k와 뺄셈한 거리보..

백준 21180번 Reconstruct Sum C++, 파이썬

리뷰파이썬이랑 C++ 시간 차이가 대단하다! 문제 풀이n을 입력 받아주고 n크기의 벡터에 숫자를 입력 받아준다.합을 나타낼 sum을 0으로 초기화 해주고, 정답을 체크할 ans를 100001로 초기화 한다.for문을 돌며 현재 숫자가 전체 벡터합에서 자신을 뺀수와 동일하다면 ans를 최신화 하고 break 해준다.for문이 종료된 후 ans가 그대로 100001이면 BAD를 출력, 아니라면 ans값을 출력해 준다. 참고 사항입력될 수 있는 최대 수가 10^5이므로 ans를 100001로 초기화 해주었다.  정답 코드C++ 코드#include #include using namespace std;int main() { int n; int sum = 0; int ans = 100001; cin >> n; ve..

SWEA 4193번 D4 수영대회 결승전 ( 완전 탐색 + 구현 ) C++, 파이썬

리뷰1BFS를 사용해 문제를 풀었다!문제 풀이테스트 케이스의 개수를 받아와 FOR문을 개행하고 배열의 크기 N을 받아와 N*N크기의 벡터에 값을 채워준다.시작 지점과 도착 지점을 입력받아 시작 지점을 (x, y, 0)의 튜플로 만들어 준다, 4방향 리스트도 전역으로 초기화.bfs의 인자로 만들어둔 튜플과 도착 지점의 x, y좌표를 넘겨준다. 나머지는 전역변수로 활용해준다.받아온 튜플을 큐에 삽입하고 while루프를 실행한다.큐의 제일 앞 데이터를 꺼내 x, y, time으로 초기화 해준다, 만약 목표 지점에 도착했으면 time을 return4방향 리스트를 돌면서 다음 좌표를 갱신한다. 범위를 넘어가지 않을 경우 2가지 경우에 대해 따로 처리해 준다.다음 좌표가 0일 경우 해당 위치를 시간 + 1값으로 할..

백준 14940 쉬운 최단거리 파이썬, C++

리뷰BFS를 통한 풀이 문제 문제 풀이리스트1에 입력 값을 받고, 리스트2에 출력할 2차원 배열을 n * m만큼 -1로 초기화 한다. 방향 배열을 초기화 한다.리스트1에 존재하는 0값을 찾아 리스트2의 동일한 위치를 0으로 만들어 준다.리스트1에 존재하는 2값을 찾아 시작점을 나타낼 좌표로 저장을 한다.시작 좌표를 기준으로 bfs를 시작한다, 범위를 벗어나지 않으며 다음 좌표의 ans 값이 -1일 경우 현재 위치의 값에 1을 더한 값을 다음 좌표에 할당해 주고 큐에 다음 좌표를 추가한다.bfs가 종료된 이후 리스트2 배열의 전체를 출력해 주면 된다. 참고 사항방문 배열은 딱히 사용할 필요가 없었다.  정답 코드파이썬 코드import sys, collectionsn, m = map(int, sys.stdi..

백준 11724 연결요소의 개수 파이썬, C++

리뷰DFS로 풀었다, 파이썬 첫 시도는 재귀가 너무 깊어서 RecursionError, 이후는 sys를 사용하지 않아 시간초과sys를 사용하니 문제 풀이가 되었다, 확실히 파이썬과 C++ 성능차이가 큰 것 같다. 문제 풀이 1에서 n까지 딕셔너리의 key로 설정하고 value는 빈 리스트로 초기화 해준다.m줄에 걸쳐 들어오는 간선을 딕셔너리에서 양방향으로 각 key의 리스트에 추가해준다.방문을 체크할 리스트를 False로 n + 1의 길이만큼 초기화 해준다.1에서 n까지 for문을 돌며 아직 방문하지 않은 인덱스라면 dfs를 돌려주고 연결 요소를 1만큼 더해준다.총 연결 요소를 출력해 준다. 참고 사항파이썬을 사용할 거라면 sys.stdin.readline()을 사용해 주면 시간 초과를 피할 수 있다.재..

백준 7576번 토마토 파이썬, C++

리뷰BFS를 사용하여 풀었다. 문제 풀이가로 세로의 범위를 변수 M, N 및 2차원 배열의 정보를 리스트로 입력받아 저장하고, 방향 리스트를 초기화 한다.BFS를 실행하고 방문을 표시할 V리스트 및 현재 배열에 존재하는 1들을 큐에 모두 넣어주고 해당 좌표를 방문 처리while루프를 실행하여 큐에 있는 좌표에서 4방향 중 방문하지 않았고 값이 0인 경우 방문처리 및 현재 좌표의 값에 1을 더한 값을 저장해준다, 그리고 큐에 다음 좌표를 추가bfs가 종료된 후 리스트를 순회하며 최고값을 갱신해 주고 만약 0이 있을 경우 flag를 작동시킨다.flag가 작동 되어 있을경우 출력값은 -1, 아닐 경우 최고값에서 1을 빼준 값을 출력해 준다. 참고 사항최고값에서 1을 빼주는 이유는 1인 값에서 부터 시작해서 +..

백준 28702번 FizzBuzz C++

리뷰문제에 대한 이해가 잘 되지 않아 풀이에 생각보다 시간이 오래 걸렸다. 브론즈 문제 아닌거같은데.. 문제 풀이받아온 문자열을 정수로 변환해 주는 함수 to_int를 작성해 주고 받아온 문자열 세개를 각각 함수를 돌려준다.만약 문자열이 FizzBuzz 라면 -15를 리턴, Fizz라면 -3, Buzz라면 -5를 리턴해 준다.아무것도 해당이 되지 않으면 문자열을 정수형으로 바꾸어 리턴정답 변수를 정수형으로 초기화 하고 만약 첫번째 문자열이 0이상 즉, Fizz나 Buzz나 FizzBuzz가 아닐 경우 3을 더한값을 정답 변수에 할당해 준다, 두번째 문자열일 경우 +2, 세번째 문자열일 경우 +1to_str 함수를 작성하고 정답 변수에 저장된 정수가 15의 배수면 FizzBuzz, 3의 배수면 Fizz, ..

백준 30802번 웰컴 키트 C++

리뷰  문제 풀이셔츠의 총 개수를 변수 n에 입력을 받고 각 사이즈의 셔츠 개수 정보를 벡터에 추가해 준다.이후 티셔츠 묶음과 펜 묶음을 각각 변수 t, p에 받아주고 변수 cnt를 0으로 초기화 해준다.셔츠 개수를 t로 나눈 값을 변수 cnt에 더해준다. (소숫점이 발생할 경우 올림 처리해 준다.)cnt를 출력해 준 후, n을 p로 나눈 몫과 나머지를 각각 출력해 주면 된다.  참고 사항없음  정답 코드#include #include #include #include using namespace std;int main() { int n, a, t, p, i, j; vector shirts; cin >> n; for (i = 0; i > a; shirts.push_back(a); } cin >> t >>..

백준 2822번 점수 계산 C++

리뷰map을 처음으로 사용해 보았다. 파이썬 딕셔너리가 훨 편하다.. 문제 풀이각 점수와 인덱스를 저장하기 위해 map을 통해 점수는 key로 인덱스는 value로 받아왔다.벡터에는 값만 저장 후 내림차순으로 정렬하여 상위 5개 점수의 합을 구해주었다.인덱스를 나타낼 벡터를 새로 초기화 하고 상위 5개 점수를 키로 갖는 인덱스를 해당 벡터에 추가해 주었다.상위 5개 점수의 합 출력 인덱스 벡터를 오름차순으로 정렬 후 상위 5개의 인덱스 출력 참고 사항모든 문제에 대한 점수는 서로 다르기에 점수를 map의 key값으로 받아도 괜찮다.  정답 코드#include #include #include #include #include using namespace std;int main() { map dic; vect..

728x90
반응형