반응형

알고리즘 29

[SW expert] 3066 팀 정하기

어쩌다 그냥 시간을 보내던중 이런 글을 봤다.. 알고리즘은 이제 접은지 오래 됐는데.. 그냥 호기심이 들었다. 그러다 과연 D7중에 할만한게 있을까 찾아보고 했는데 심심풀이가 하나 있었던것 같다. 이게 D7인지 의문이지만.. 연습장도 필요없다 바로 풀어보자.. https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV_WwlpqAAoDFAX7 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 그냥 구현?은 아니고 생각만 간단하게 해서 풀면 된다. K값에 따라 남/여 숫자만 줄여나가면 되니.. 그리고 줄인 수마다 각 경우에서 그룹의..

[프로그래머스] SQL 연습 -SUM,MIN,MAX,IS NULL-

이번에는 프로그래머스 SQL 연습문제의 집계 함수와 IS NULL 파트를 간단하게 알아본다. 우선 문제의 정답은 아래와 같다. 문제는 이곳에서 확인하자 programmers.co.kr/learn/challenges 먼저 집계 함수부터 보면 SUM, MAX, MIN, COUNT, AVG가 있다. 말 그대로 합, 최대, 최소, 갯수, 평균을 구해준다. SELECT 쿼리문에 사용하며 나중에 배울 GROUP 절에서 사용할 수 있다. 물론 이 집계 함수를 사용할때 테이블의 자료형을 보고 사용할 수 있도록 하자. 마지막 문제에 DISTINCT 라는 키워드가 있는데 이는 중복을 제거하는 키워드이다. 한 컬럼에 대해서 중복을 제거할 수 있다는 것을 알아두면 유용할 것이다. 다음은 NULL 데이터에 대한 처리를 하는 예..

[프로그래머스] SQL 연습 -SELECT-

SQL 쿼리를 어쩌다 연습하게 되서 이곳에 정리하고자 한다. 프로그래머스 SQL Kit 고득점에 총 6개가 있는데 푼것을 기준으로 한개 카테고리씩 정리한다. 우선 전체 문제에 대한 정답은 아래와 같다. 문제는 이곳에서 확인하자 programmers.co.kr/learn/challenges 쿼리에 질문은 SELECT로 하는 것은 모두가 알고 있을것이다. SELECT *를 통해 모든 Collum을 조회할 수 있고 필요한 컬럼만을 조회할 수도 있다. SELECT [컬럼명] (as) [이름] 으로 SQL 출력에서 컬럼 이름을 바꿀수도 있다. FROM 절을 통해 어떤 테이블을 사용할지 지정하고 이후로, WHERE 등을 이용한 조건을 사용할 수 있다. WHERE 절은 예시와 같이 사용하며 != 를 포함하여 AND ..

[백준] 19237 어른 상어

올해 삼성 역량테스트 문제로 알고 있다. 이 문제는 시키는 대로 구현하는 문제이다. 문제의 출처는 아래와 같다. https://www.acmicpc.net/problem/19237 이 문제는 복잡한 구현으로 설계를 잘해야한다. 먼저 각 상어들을 구조체로 관리하여 위치와 방향, 그리고 살이있는지를 관리한다. 문제에서 방향에 따라 복잡하게 구현되어져 있는데 그것을 shark_dir[상어번호][방향][우선순위] 로 지정해 주었다. 사용방식은 sol() 함수의 내부를 보면 이해할 수 있다. 마지막으로 상어의 냄새와 해당 위치에서의 상어 번호를 관리해준다. (smoke[x][y][냄새],smoke[x][y][상어번호] ) 이제 시뮬레이션은 아래와 같다. 0) 입력과 함께 해당 위치에서의 냄새 및 상어번호를 저장하..

[백준] 15661 링크와 스타트

문제의 출처는 아래와 같다. https://www.acmicpc.net/problem/15661 이 문제는 삼성 역량테스트 기출문제인 '스타트와 링크' 의 상위호환 버전으로 문제가 조금 변형된 문제이다. 원래 문제에서는 팀을 두 그룹으로 나눌 때, 팀의 인원이 같은 즉, N/2 명으로 동일한 상태를 요구했다. 이 문제는 팀을 두 그룹으로 나눌 때, 팀의 인원이 다를 수 있다. 즉 N이 4일때 (1) , (2,3,4) 와 같이 팀의 인원이 다른 상태를 생각해야 하는 문제이다. 그래서 필자는 그룹을 나누기 위해 부분집합을 사용하였다. 부분집합을 구하면서 바로 연산을 해도 되지만 필자는 N의 부분집합을 모두 구한 상태에서 조건에 맞지 않는 부분과 이미 동일한 부분집합의 내용일때 그 경우를 바로 리턴하였다. 규..

[백준] 16988 Baaaaaaaaaduk2 (Easy)

문제의 출처는 아래와 같다. https://www.acmicpc.net/problem/16988 이 문제 역시 삼성 역량테스트 연습 문제이며 기출 문제의 '연구소'와 비슷한 문제이다. 내가 느끼기에는 '연구소' 보다 하위호환정도의 난이도이다. 이 문제는 바둑돌을 둘 수 있는 전체 경우와 각 경우에 BFS 탐색으로 조건에 맞게 실행하여 최대값을 갱신해주는 문제이다. DFS로 전체 경우를 해도 되지만, 여기서는 다중 for문을 이용해 2개의 바둑돌을 놓을 수 있다. 2개의 바둑돌을 놓았으면 BFS를 하는데 조건에 알맞지 않으면 그 경우는 제외하여 코드를 짜면 된다. main을 보면 4중 for문으로 이루어져 있다. 이와 같이 전체 빈 공간에 2개의 바둑돌을 놓고, BFS를 호출하여 정답을 갱신해준다. 1 2..

알고리즘 2020.06.05

[백준] 18808 스티커 붙이기

문제의 출처는 아래와 같다. https://www.acmicpc.net/problem/18808 출처에 문제를 만든 사람이 유명한 사람이다. 구현과 BFS,DFS 위주의 기업테스트와 유사하게 까다롭게 문제를 만든다. 연습용으로 풀어보기 좋으니 풀어보자. 이 문제의 설계는 아래와 같다. 1) 격자판을 모두 탐색하면서 조건에 부합하면서 가능한 곳에 색종이를 놓기 (Run()함수) 2) 색종이를 회전시키는 함수 (rotate() 함수) 이 두가지를 구현하는 문제이다. 이런 구현 문제는 항상 회전이 알맞게 움직이는지, 모든곳을 조건에 맞게 탐색하는지 테스트데이터를 하나 만들어서 확인해야 오류나 에러를 최대한 줄일수 있다. 주석처리로 된곳이 확인한 부분들이다. 이외의 부분들은 코드의 주석을 확인하자. 123456..

알고리즘 2020.05.20

[백준] 17281 야구?

문제의 출처는 아래와 같다. https://www.acmicpc.net/problem/17281 삼성 A형 기출문제 문제집에 야구공 모양의 문제이다. 이 문제는 처음에 아무리봐도 이해가 잘 되지 않았다. 그래서 처음에 해설을 참고할 수 밖에 없었다. 이 문제는 1) 순열을 통해 전체 경우를 찾는데, 4번타자는 항상 처음에 배치되는 조건을 만든다. 2) 야구의 규칙대로 구현을 한다. 인데 각 줄에 있는것이 무슨 의미인지 이해를 못했다. 각 줄은 1~n 이닝이니 순서와 상관이 없다. 우리는 순열을 사용해서 3아웃이 되면 다음 이닝에 따른 값을 사용하면 되는 문제이다.... 구현부분은 잘 작성이 안되어서 해설코드를 그대로 참고하여 내 코드에 맞게 조금만 수정하였다. 문제는 처음에 순열을 next_permuta..

백준[14891] 톱니바퀴

삼성 역량테스트 기출문제중 하나이다. 문제의 출처는 아래와 같다. https://www.acmicpc.net/problem/14891 이 문제는 구현으로 문제에서 하라는대로 하면 되는 문제이다. 회전을 구현한 다음 문제를 잘 읽어서 이해하여 톱니바퀴를 문제의 조건에 맞게끔 움직이면 된다. 먼저 회전부터 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 void rotate(int a) { // 반시계 char tmp = arr[a][0]; for (int i = 0; i 0; i--) arr[a][i] = arr[a][i-1]; arr[a][0] = tmp; //printf("%s\n", arr[a]); } http://colorscripter.com/info#e" target="_blank"..

백준[17144] 미세먼지 안녕!

출처는 아래와 같다. 2019년 삼성 상반기 기출문제로 알고있다. acmicpc.net/problem/17144 이 문제 역시 시키는대로 구현하면 되는 문제이다. 문제는 구현이 누군가에게는 쉬울수도 어려울수도 있다는 것이 문제이다. 문제를 보면 2가지로 나누어 순서대로 구현하여 문제를 해결하면 된다. 순서대로 확인해보자. 1) 확산 미세먼지가 확산된다는데 그냥 읽어서는 정확하게 구현하기 쉽지 않다. 필자는 예제에 있는 그림 중 3번째 그림을 보면서 이해하는데 시간이 좀 걸렸다. 이것을 코딩하는데 생각하는것도 만만치 않을텐데 필자는 나눠줘서 확산되는 값들을 저장하는 f[][] 배열을 통해 구현하였다. f[][] 배열은 확산에 따른 모든 값들을 더해지게 되고 원본 배열은 arr[][]에는 정 중앙의 확산에 ..

반응형