목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 풀이 퀵정렬을 사용해도 시간초과가 떠서 map을 이용해서 풀었다.비교하는 입력이 문자인 경우 map을 사용해서 위치를 찾았고, 숫자인 경우 배열에 정렬해서 해당 위치를 출력했다. 코드 #include #include #include #include #include using namespace std; unordered_map Map1; string Map2[100001..
https://school.programmers.co.kr/learn/courses/30/lessons/176963 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 두 개의 값이 같이 저장되어야 하므로 map을 사용했다. map에 값을 넣고, find했을 때 있는 경우 점수를 더하는 방식을 사용했다. 다른 사람의 풀이를 보니 unordered_map을 이용해서 풀었길래 해당 방법으로 풀고 결과를 비교해봤다. https://mseagle.tistory.com/106 map vs unordered_map vs map unordered_map 정렬 오름차순..
https://school.programmers.co.kr/learn/courses/30/lessons/12981 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 단어의 중복과 끝말잇기 조건 두 가지를 고려했다. 코드 #include #include #include #include using namespace std; vector solution(int n, vector words) { vector answer; set S; S.insert(words[0]); int i; for(i = 1; i < words.size(); i++){ S.insert(..
https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 문자열 자르고 붙이기 하다가 효율성 테스트에서 막혔다. 결국 질문들 찾아보고 stack으로 해결함ㅠ baabaa에서 aa가 제거되면 b가 남고 다음 b를 만나면 스택에 있는 b를 pop하는 아주 간단한 원리였는데 b aa baa -> bb aa -> aa 만 보다보니 stack을 써야 된다는 생각을 못 했다. 문제를 어떻게 풀지 분석할 시간을 더 오래 잡아야겠다... 코드 #include #..
https://school.programmers.co.kr/learn/courses/30/lessons/12911 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 처음엔 100만까지의 숫자의 2진수를 각각 생각해봤으나 100만은 n의 범위이지 답의 범위가 아니다.딱히 수가 증가함에 따라 2진수의 변화에 적용할 수 있을 만한 규칙이 보이지 않았고, 설마 while문의 반복일까 했는데 시간초과 없이 정답이었다. 찝찝해서 찾아보던 중 비트셋을 사용해서 엄청 간단하게 푼 코드를 찾았다. bitset에 대한 정보는 아래 링크가 가장 보기 편했다. STL 공부를..
https://www.acmicpc.net/problem/1652 1652번: 누울 자리를 찾아라 첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다. www.acmicpc.net 풀이 한 줄에 연속해서 2칸 이상의 빈 칸이 존재하면 누울 수 있다. 이 때 ..X.. 과 같이 X를 중간에 두고 2칸 이상이 있다면 이는 누울 수 있는 자리를 2개로 해석해야 한다. ....X, ...X., .X...과 같은 경우는 1개. 문제 설명이 애매해서 해당 부분에서 헷갈렸다. 한 줄씩 가로 세로로 탐색하며 누울 수 있는 경우 카운트 해줬고, 중간에 벽이 나올 경우에만 재카운트가..
https://www.acmicpc.net/problem/2578 2578번: 빙고 첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 www.acmicpc.net 풀이 빙고판을 입력 받고, 숫자가 하나씩 들어올 때마다 해당 위치를 체크한 후 그 위치가 채워짐으로써 해당 줄이 다 채워짐을 확인했다. 이 때 가로, 세로는 모두 확인했고, 대각선 빙고가 만들어질 수 있는 위치의 경우는 해당 케이스를 추가로 확인했다. 코드 #include int bingo[5][5], line = 0; bool check[5][5]; void Is_bingo(int x, int y) { int..
https://www.acmicpc.net/problem/10973 10973번: 이전 순열 첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 풀이 뒤에서부터 앞자리 숫자와 비교해 오름차순이 아닐 경우 탐색을 중단하고, 해당 부분부터 순서를 바꿨다. 중단된 지점의 앞 부분은 변화가 없다. 중단된 지점은 해당 지점의 값보다 작은 수로, 그 이하는 나머지 숫자를 내림차순으로 출력하면 된다. 수를 몇 개 대입해보면 이 같은 규칙을 알 수 있다. 더보기 1 2 3 4 5 1 2 3 5 4 - 1 2 4 3 5 1 2 4 5 3 - 1 2 5 3 4 1 2 5 4 3 -- 1 3 2 4 5 1 3 2 ..