본문 바로가기

Algorithm

(640)
1952. [모의 SW 역량테스트] 수영장 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do DFS를 사용하는 문제이지만 그리디 적으로 비용을 증가시키는 부분을 제외시켜서 DFS의 반복횟수를 줄이는 작업이 필요하다. #include using namespace std; int day; int month; int tmonth; int year; int mina; int result; bool visit[13]; int mon[13]; void DFS(int cur) { if(!visit[cur]) { if(cur != 12) { if(mon[cur]*day < month) { result += mon[cur]*day; visit[cur] = true; DFS(cur+1); r..
백준 10809 알파벳 찾기 오랜만에 스트링 문제를 풀어보고 싶었다.. 간단한 문제. 문제 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다. 출력 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다. #include #include using namespa..
2105. [모의 SW 역량테스트] 디저트 카페 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do 정말 힘들게 풀었다.... 1. 방향에 대한 설정 -> 자꾸 시간초과가 났는데 그 이유중 가장 큰 것은 회전 방향을 오른쪽과 왼쪽 두개를 다 고려했기 때문 결과적으로 오른쪽으로 회전하나 왼쪽으로 회전하나 거치는 사각형은 모두 같기 때문에 하나만 설정해야함. 2. 이전 방향에 대한 다음 방향 결정 -> 사각형을 만들기 위해서 이전에 들어오는 방향을 살펴 볼 필요가 있다. 예를들어 오른쪽 아래로 내려오는 경우에 이것이 다시 왼쪽 아래로 이동한다면 사각형이 아닌 모양으로 출발점에 들어온다던가, 필요없는 재귀가 반복되어 시간이 증가함. 가장 크게는 이 두가지를 고려해야 하고 , 처음 장소에..
8998. 세운이는 내일 할거야 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do 계속 시간초과가 나는 이유를 모르겠는데,, 찾아보니 알고리즘은 내 방식과 정확히 일치 했다. 다만 pass한 사람은 자바로 구현했을 뿐.. cin에서 시간을 많이 잡아 먹는 것 같아서 ios::base_sync_with 해줬는데 안된다. #include #include using namespace std; int main(void) { int test_case; int T; cin >> T; for(test_case = 1; test_case > N; for(int i = 0; i > a >> b; pr.push({b,a}); } int..
1226. [S/W 문제해결 기본] 7일차 - 미로1 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do 마지막에 도착지점은 3이 들어와야 하므로 que의 push조건을 잘 설정 해야한다. 문제 푸는 요령 컴파일 완료 -> 테케 넣고 -> 틀렸으면 로그 삽입. -> 틀린 부분 바로잡기. #include #include using namespace std; string arr[16]; bool visit[16][16]; int main(void) { for(int i = 0; i> N; bool check = false; for(int j = 0; j > arr[j]; for(int k = 0; k < 16; k++) { visit[j][k] = false..
1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do 간단한 문제였다 . 정답률이 40%인 이유는 아마 입력을 제대로 확인하지 않아서일까? 필요없는 자료구조는 쓰지 않는 것이 시간절약의 핵심. #include using namespace std; int arr[1001]; int score[101]; int main(void) { int N; cin >> N; for(int i = 0; i > num; for(int j = 0; j arr[j]; score[arr[j]]++; } int max = 0; int result = 0; for(int j = 0; j
1206. [S/W 문제해결 기본] 1일차 - View 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 아이디어) 좌우로 2개의 빌딩에 의해 가려지면 안되므로 자신 기준 -2 ,-1 , +1, +2에 대해 조사를 한다. 시간을 줄여야 하기때문에 OR로 묶는 것보다 -2위치의 빌딩이 자신보다 크다면 바로 return 시켜버리는 식의 조사를 진행. 만약 4개의 빌딩이 전부 자신보다 작다면 자신과 그 빌딩의 높이차의 최소를 구해서 result에 더 해주면 끝 약간의 실수) 입력을 제대로 안보고 인덱스 범위를 2부터 N-2까지 입력받았는데 0 0을 전..
백준 5525번 IOIOI 문제 N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다. (1 ≤ N ≤ 1,000,000, 2N+1 ≤ M ≤ 1,000,000) 출력 S에 PN이 몇 군데 포함되어 있는지 출력한다. 이전 IOI를 포함하여 다음 IOI를 생성하는 경우를 포함해야 함. #include #include using namespace std; int main(void) ..