본문 바로가기

코딩 소양/알고리즘 문제

(12)
[백준 알고리즘] 15684번 사다리 조작 다음 본 문제는 또 삼성 상반기 문제 였던 사다리 조작문제입니다. 15684 사다리 조작 전 이 문제 손도 못 댔었는데.. 그 이유가 방법을 모른다는 것이긴 하지만..! 감이 완전 안오던 문제였어요. 이제 와서 풀어보고 느낀 것이지만, 정말 기초적인 개념이 매우 중요한 문제 였던 것 같습니다. 이번 문제는 전에 풀었던 감시문제와 비슷하게 순열 조합 개념이 들어갑니다. 정말 당황 스럽게도… 답은 전수 조사 였습니다. 삼성은 약간 DFS, BFS랑 조합을 섞은 시뮬레이션같은 문제를 좋아하나 봅니다.ㅋㅋㅋ vector T; int arr[4] = {1,2,3,4}; vector com; void swap(int *a, int *b ){ int tmp; tmp = *a; *a = *b; *b = tmp; } v..
[백준 알고리즘] 15683번 감시 안녕하세요! 오랜만에 포스팅을 하게 되었네요ㅎㅎ 이번에 풀어본 문제는 2018 상반기 삼성 SW역량 테스트 문제인 감시문제입니다.15683번: 감시 저도 상반기에 시험봤던 문제인데, 풀지 못했던 문제였는데..ㅠㅠ 다시 푸니까 감회가 새롭네요!!! 이 문제를 풀면서 느낀건 n이 1000 이하의 수라면 n^2의 연산도 매우 짧다는 걸 느꼈습니다. 먼저 문제를 풀기 위해선 중복 순열을 알고 있어야 합니다. 제가 최근에 경우의 수 순열, 조합, 중복 순열에 개념이랑 코드를 포스팅했었습니다.제가 이 문제를 처음 접근했을 때는 감시 범위가 가장 큰 카메라를 먼저 설정하는 방식으로 문제를 풀었는데, 자꾸 틀렸다고 해서 적용해보았는데 맞더라구요.이를 중복순열을 적용한다는 건 결국 각 감시 카메라에 대해서 가능한 모든 ..
[백준 알고리즘] 6593번 상범빌딩 이번에 풀어본 문제는 백준의 상범 빌딩입니다. 6593번: 상범 빌딩 3차원의 간단한 BFS문제입니다. 다익스트라 알고리즘 분류로 들어가서 풀었는데 왠 BFS인지..ㅋㅋ 너무 간단하게 해결!! 많은 분들이 이렇게 풀긴 하지만, 전 처음 해봤는데 좌표를 이동 시키는데 해당 이동 값을 저장시킨후에 for문을 돌리는 방법이 보기에 편한 것 같더라구요. 그림을 보면 좌표의 이동이 이렇게 되는 것을 알 수 있습니다. 좀 헷갈리긴 하지만, 가만 생각해보면 맞다는 것을 알 수 있습니다.그러면 이렇게 표현할 수 있겠네요. int moveH[6] = { -1, 1, 0, 0, 0, 0}; int moveX[6] = { 0, 0, 0, 0,-1, 1}; int moveY[6] = { 0, 0,-1, 1, 0, 0}; 이렇..
[백준 알고리즘] 2178번 미로찾기 이번에 풀어본 문제는 백준의 미로 찾기문제입니다.2178번: 미로 탐색 문제는 정말로 미로찾기 문제이고, 주어진 미로에서 도착지까지 가는 최소 칸 수를 구하는 문제입니다. 처음엔 재귀함수로 풀었는데, 도착지가 있는 경우엔 재귀함수를 사용하는 것이 애매하더라구요. 그래서 queue로 접근해보았습니다!! 시작점(1,1)을 queue에 push한다. 현재 기준점을 기준(queue의 front)으로 위, 아래, 오른쪽, 왼쪽 4 방향을 검색한다. 끝 정말 전형적인 BFS, DFS문제입니다!! 제가 처음 문제를 풀었을 때는, 이렇게 풀었어요. 위와 동일 queue에 집어넣는 것은 (x,y좌표와 (x,y)까지 가는 칸수) 도착지 까지 간 경우 기존 도착지 까지 간 칸수와 최근 들어온 칸수를 비교해서 작은 값으로 설..
[CodeGround] 괄호 문제 이번에는 코드그라운드의 괄호문제 입니다. codeground 문제를 간단하게 말하면 괄호 순서가 올바르게 된 부분 문자열의 최대 길이를 구하라는 겁니다!! 괄호 문제는 사실 유명하죠!! 여러 곳에서 나오는 문제 중 하나입니다. 이 문제는 괄호의 성질을 잘 생각해보면 간단하게 풀 수 있는데, 한번 봅시다. [{}()] 이런 경우는 올바른 괄호가 되겠죠. 모두 잘 닫혔으니까.[]{)[] 이런 경우는 가운데 {)이거 때문에 제대로 되지 않겠네요. 괄호는 한번 열리면 같은 모양으로 반드시 닫혀야 하는 성질이 있죠. 이를 잘 생각해보면 가장 최근에 열린 괄호는 먼저 닫혀야 한다.라는 결론이 나오네요!! 조금 느낌이 오시나요?? 정답은 stack에 있습니다!! stack으로 풀면 해결은 되는데 코드그라운드에서는 t..
핵심 친구 찾기 문제 이번에 풀어본 문제는 삼성 소프트웨어 역량테스트라는 책에 있는 모의고사 문제인 핵심 친구 찾기문제입니다!! 먼저 문제에 대한 설명은 이러합니다. 담임 선생님이 새 학기가 되서 학생들 친구관계를 조사하고 있어요. 여기서 선생님은 핵심 친구를 찾으려고 하는데,핵심 친구란 해당 친구가 빠지게 되면 친구관계에서 연결 되지 않는 친구가 생기는 경우 그 친구를 핵심 친구라고 해요. 예를 봅시다. 이런 친구관계 그래프가 있다고 합시다. 여기서 만약 3번 친구가 없다고 생각하고 다시 친구 관계도를 봅시다. 오호 3번 친구가 없어도 나머지 친구들이 잘 이어져 있네요. 이런 경우 3번 친구는 핵심 친구가 아니게 되는거죠. 이번엔 6번 친구가 빠졌다고 생각해봅시다.오호 6번 친구가 빠지니까 7,8,9 친구가 다른 애들이랑 ..
[백준 알고리즘] 14891번 톱니바퀴(삼성 기출) 이번엔 삼성 SW역량 테스트 기출문제 14891번 톱니바퀴를 준비해보았습니다!!! 문제가 꽤 기네요!!! 문제를 간략하게 보면 톱니바퀴 4개를 돌릴 껀데 다 돌려서 최종 결과를 수치화 해서 보여주시오. 이것입니다. 먼저 문제를 설계하기 위한 여러가지를 생각해봅시다. 톱니바퀴 정보를 저장할 변수 등 여러가지 변수 함수 설계 사용할 알고리즘(배경) 톱니바퀴를 돌리고, 영향을 받는다고 할때 어떻게 돌아갈까? 간략하게 3개 정도 볼 수 있겠네요. 전 먼저 배경이 될 알고리즘으로는 BFS를 생각하였습니다. BFS는 주변을 먼저 살피자 라는 느낌이 있으니까용ㅎㅎ 그러면 사용할 변수들을 생각해봅시다. 톱니바퀴는 4개 고정, 8개의 톱니를 가지니까 4개의 톱니바퀴 배열(길이는 8)로 생각할 수 있죠. 저는 접근에 용이..
[백준 알고리즘] 3053번 택시 기하학(기하) 이번엔 조금 색다른 문제를 준비해보았습니다. 제가 도형, 기하학에 약해서.. 기하 문제를 준비해봤는데, 신기한 문제네요!! 3053번: 택시 기하학 문제를 보면 택시 기하학이라는 내용이 나오네요!!! 우리가 지금까지 배웠던 유클리드 기하학이 아닌 새로운 기하학으로 거리를 계산하는 방법이 특이하네요!! 이렇게 나오네요!! 물론 택시 기하학에 관해서 더 특이한 내용이 많겠지만, 이 문제를 풀때는 이 개념만 알면 금방 풀리네요ㅎㅎ 먼저 이 문제를 풀기 위해서는 원의 개념적 정의에 대해서 알아야할 필요가 있습니다. 저 어릴땐 선생님이 수학은 정의에서 다 끝난다고해서 전 다 외웠는데..ㅋㅋㅋㅋ못 외우면 혼났음 ㅠㅠ 원 : 한 점(중심점)을 기준으로 같은 거리에 있는 점들의 모임 자 그럼 유클리드, 택시 거리 공식..