본문 바로가기

Problem Solving/SWEA147

[SWEA] 1232. [S/W 문제해결 기본] 9일차 - 사칙연산 문제 사칙연산으로 구성되어 있는 식은 이진 트리로 표현할 수 있다. 아래는 식 “(9/(6-4))*3”을 이진 트리로 표현한 것이다. 임의의 정점에 연산자가 있으면 해당 연산자의 왼쪽 서브 트리의 결과와 오른쪽 서브 트리의 결과를 사용해서 해당 연산자를 적용한다. 사칙연산 “+, -, *, /”와 양의 정수로만 구성된 임의의 이진트리가 주어질 때, 이를 계산한 결과를 출력하는 프로그램을 작성하라. 단, 중간 과정에서의 연산은 실수 연산으로 하되, 최종 결과값이 정수로 떨어지지 않으면 정수부만 출력한다. 위의 예에서는 최종 결과값이 13.5이므로 13을 출력하면 된다. 풀이방법 DFS(깊이 우선 탐색) 알고리즘으로 후위 순회를 하면서 노드의 값이 피연산자이면 스택에 담고 연산자이면 스택에 담겨진 두개의 피.. 2020. 3. 7.
[SWEA] 1231. [S/W 문제해결 기본] 9일차 - 중위순회 문제 다음은 특정 단어(또는 문장)를 트리 형태로 구성한 것으로, in-order 형식으로 순회하여 각 노드를 읽으면 원래 단어를 알 수 있다고 한다. 위 트리를 in-order 형식으로 순회할 경우 SOFTWARE 라는 단어를 읽을 수 있다. [제약 사항] 총 10개의 테스트 케이스가 주어진다. 총 노드의 개수는 100개를 넘어가지 않는다. 트리는 완전 이진 트리 형식으로 주어지며, 노드당 하나의 알파벳만 저장할 수 있다. 노드가 주어지는 순서는 아래 그림과 같은 숫자 번호대로 주어진다. 풀이방법 중위 순회 방식은 왼쪽의 자식노드 -> 부모노드 -> 오른쪽 자식노드 순으로 방문하는 알고리즘이다. 입력이 너비를 기준으로 1, 2, 3, 4,...로 입력되었기 때문에 노드에 자식노드를 가르키는 포인터 정보.. 2020. 3. 7.
[SWEA] 4613. 러시아 국기 같은 깃발 문제 2016년은 삼성전자가 러시아 현지법인을 설립한지 20주년이 된 해이다. 이를 기념해서 당신은 러시아 국기를 만들기로 했다. 먼저 창고에서 오래된 깃발을 꺼내왔다. 이 깃발은 N행 M열로 나뉘어 있고, 각 칸은 흰색, 파란색, 빨간색 중 하나로 칠해져 있다. 당신은 몇 개의 칸에 있는 색을 다시 칠해서 이 깃발을 러시아 국기처럼 만들려고 한다. 다음의 조건을 만족해야 한다. 위에서 몇 줄(한 줄 이상)은 모두 흰색으로 칠해져 있어야 한다. 다음 몇 줄(한 줄 이상)은 모두 파란색으로 칠해져 있어야 한다. 나머지 줄(한 줄 이상)은 모두 빨간색으로 칠해져 있어야 한다. 이렇게 러시아 국기 같은 깃발을 만들기 위해서 새로 칠해야 하는 칸의 개수의 최솟값을 구하여라. 첫 번째 예제이다. 왼쪽에 있는 그림.. 2020. 3. 7.
[SWEA] 3347. 올림픽 종목 투표 문제 2018년 올림픽은 한국에서 열린다. 이전 올림픽에서 채택되었던 종목에 더해 하나의 종목을 더 추가하려고 하는데, 다음과 같은 투표 과정을 거친다. 조직위원회가 정식 종목으로 새롭게 채택하고자 하는 종목 N개에 대해 재미가 있다고 생각되는 순서대로 나열한 리스트가 있다. 위에서부터 i번째로 있는 종목이 i번째로 재미있는 종목인 것이다. 또한 i번 종목을 개최하는데 드는 비용은 Ai이다. 조직위원회는 총 M명으로 구성되어 있으며, 순서대로 1번 위원에서 M번 위원이다. j번 위원은 개최 비용이 Bj를 넘지 않는 종목 중에서 가장 재미있는 경기에 표를 준다. 이 기준에 부합하는 경기는 모든 위원에 대해 반드시 존재한다. 가장 많은 표를 획득한 경기는 하나이다. 첫 번째 테스트 케이스를 예를 들어보자. .. 2020. 3. 7.
[SWEA] 7854. 최약수 문제 자연수 A가 자연수 B의 약수이기 위해서는 B가 A로 나누어 떨어져야 한다. 초등학생인 정우는 오늘 배운 약수라는 개념에 홀딱 반해버렸다. 집에 가는 길에 계속 약수만 떠올리던 정우는 엄청난 사실을 발견했다! 숫자 2는 2 앞에 어떤 숫자를 붙여도 2를 약수로 가졌다. 5 역시 5 앞에 어떤 숫자를 붙여도 5를 약수로 가졌다. 예를 들어 숫자 3827를 5 앞에 붙이면 38275가 되며, 이는 5를 약수로 가진다. 정우는 이런 특별한 성질을 가지는 자연수를 최약수 라고 명명했다. 즉, 최약수란 앞에 어떤 숫자를 붙여도 자신을 약수로 가져야 한다. 정우는 최약수의 종류가 궁금했다! 정우를 도와서 주어지는 숫자 X 보다 작거나 같은 최약수의 개수를 구해주자. 풀이방법 문제에서 말하는 최약수는 한 자리 .. 2020. 3. 7.
[SWEA] 1238. [S/W 문제해결 기본] 10일차 - Contact 문제 비상연락망과 연락을 시작하는 당번에 대한 정보가 주어질 때, 가장 나중에 연락을 받게 되는 사람 중 번호가 가장 큰 사람을 구하는 함수를 작성하시오. [예시] 아래는 비상연락망을 나타낸 그림이다. 각 원은 개개인을 의미하며, 원 안의 숫자는 그사람의 번호를 나타내고 빨간원은 연락을 시작하는 당번을 의미한다. 화살표는 연락이 가능한 방향을 의미한다. 위의 예시에서는 7번과 1번은 서로 연락이 가능하다, 하지만 2번과 7번의 경우 2번은 7번에게 연락할 수 있지만 7번은 2번에게 연락할 수 없다. 비상연락망이 가동되면 아래 그림과 같이 연락을 시작하는 당번인 2번은 연락 가능한 7번과 15번에 동시에 연락을 취한다 (다자 간 통화를 사용한다고 가정). 그 다음 아래와 같이 7번은 1번에게, 15번은 4.. 2020. 3. 6.
[SWEA] 6719. 성수의 프로그래밍 강좌 시청 문제 성수는 이제 프로그래밍을 시작하기로 마음 먹은 초보다. 그렇기에 프로그래밍 강좌를 통해 자신의 프로그래밍 실력을 끌어 올리려고 한다. 성수의 실력이 A라고 할 때, 수준이 M인 강좌를 시청하고 나면 성수의 실력은 (A+M)/2가 된다. 즉, 성수는 자신이 보는 강좌가 좋은 지 아닌지 판단하지 않고 그대로 강좌를 받아들이기 때문에, 실력보다 낮은 수준의 강좌를 보면 실력이 낮아질 수 있다. 현재 성수는 아직 아무런 실력이 없다. 즉 실력이 0이다. 성수는 볼 수 있는 강좌 총 N개 찾았고 시간 문제상 이 중에서 K개를 적절한 순서로 선택해 한 번씩 시청하려고 한다. 성수가 같은 강좌를 두 번 이상 보는 일은 없다고 할 때, 성수가 가질 수 있는 실력의 수치는 최대 몇인지 구하는 프로그램을 작성하라. .. 2020. 3. 6.
[SWEA] 1868. 파핑파핑 지뢰찾기 문제 ‘파핑 파핑 지뢰 찾기’라는 유명한 게임이 있다. 이 게임은 RXC 크기의 표를 이용하는 게임인데, 표의 각 칸에는 지뢰가 있을 수도 있고 없을 수도 있다. 표의 각 칸을 클릭했을 때, 그 칸이 지뢰가 있는 칸이라면 ‘파핑 파핑!’이라는 소리와 함께 게임은 끝난다. 지뢰가 없는 칸이라면 변이 맞닿아 있거나 꼭지점이 맞닿아 있는 최대 8칸에 대해 몇 개의 지뢰가 있는지가 0에서 8사이의 숫자로 클릭한 칸에 표시된다. 만약 이 숫자가 0이라면 근처의 8방향에 지뢰가 없다는 것이 확정된 것이기 때문에 그 8방향의 칸도 자동으로 숫자를 표시해 준다. 실제 게임에서는 어떤 위치에 지뢰가 있는지 알 수 없지만, 이 문제에서는 특별히 알 수 있다고 하자. 지뢰를 ‘*’로, 지뢰가 없는 칸을 ‘.’로, 클릭한 지.. 2020. 3. 6.
[SWEA] 1210. [S/W 문제해결 기본] 2일차 - Ladder1 문제 점심 시간에 산책을 다니는 사원들은 최근 날씨가 더워져, 사다리 게임을 통하여 누가 아이스크림을 구입할지 결정하기로 한다. 김 대리는 사다리타기에 참여하지 않는 대신 사다리를 그리기로 하였다. 사다리를 다 그리고 보니 김 대리는 어느 사다리를 고르면 X표시에 도착하게 되는지 궁금해졌다. 이를 구해보자. 아래 의 예를 살펴보면, 출발점 x=0 및 x=9인 세로 방향의 두 막대 사이에 임의의 개수의 막대들이 랜덤 간격으로 추가되고(이 예에서는 2개가 추가됨) 이 막대들 사이에 가로 방향의 선들이 또한 랜덤하게 연결된다. X=0인 출발점에서 출발하는 사례에 대해서 화살표로 표시한 바와 같이, 아래 방향으로 진행하면서 좌우 방향으로 이동 가능한 통로가 나타나면 방향 전환을 하게 된다. 방향 전환 이후엔 다.. 2020. 3. 6.
[SWEA] 1486. 장훈이의 높은 선반 문제 장훈이는 서점을 운영하고 있다. 서점에는 높이가 B인 선반이 하나 있는데 장훈이는 키가 매우 크기 때문에, 선반 위의 물건을 자유롭게 사용할 수 있다. 어느 날 장훈이는 자리를 비웠고, 이 서점에 있는 N명의 점원들이 장훈이가 선반 위에 올려놓은 물건을 사용해야 하는 일이 생겼다. 각 점원의 키는 Hi로 나타나는데, 점원들은 탑을 쌓아서 선반 위의 물건을 사용하기로 하였다. 점원들이 쌓는 탑은 점원 1명 이상으로 이루어져 있다. 탑의 높이는 점원이 1명일 경우 그 점원의 키와 같고, 2명 이상일 경우 탑을 만든 모든 점원의 키의 합과 같다. 탑의 높이가 B 이상인 경우 선반 위의 물건을 사용할 수 있는데 탑의 높이가 높을수록 더 위험하므로 높이가 B 이상인 탑 중에서 높이가 가장 낮은 탑을 알아내려.. 2020. 3. 6.
[SWEA] 1249. [S/W 문제해결 응용] 4일차 - 보급로 문제 2차 세계 대전에서 연합군과 독일군의 전투가 점점 치열해지고 있다. 전투가 진행중인 지역은 대규모 폭격과 시가전 등으로 인해 도로 곳곳이 파손된 상태이다. 그림 1(a)에서와 같이 도로들은 전투로 인해 트럭이나 탱크와 같은 차량들이 지날 갈 수 없다. 전투에서 승리하기 위해서는 기갑사단과 보급부대가 신속하게 이동하기 위한 도로가 있어야 한다. 공병대는 출발지(S) 에서 도착지(G)까지 가기 위한 도로 복구 작업을 빠른 시간 내에 수행하려고 한다. 도로가 파여진 깊이에 비례해서 복구 시간은 증가한다. 출발지에서 도착지까지 가는 경로 중에 복구 시간이 가장 짧은 경로에 대한 총 복구 시간을 구하시오. 깊이가 1이라면 복구에 드는 시간이 1이라고 가정한다. 그림 1 (a) 파손된 도로 (b) 지도 형태와.. 2020. 3. 5.
[SWEA] 1211. [S/W 문제해결 기본] 2일차 - Ladder2 문제 점심 시간에 산책을 다니는 사원들은 최근 날씨가 더워져, 사다리 게임을 통하여 누가 아이스크림을 구입할지 결정하기로 한다. 김 대리는 사다리타기에 참여하지 않는 대신 사다리를 그리기로 하였다. 사다리를 다 그리고 보니 김 대리는 어느 사다리를 고르면 X표시에 도착하게 되는지 궁금해졌다. 이를 구해보자. 아래 의 예를 살펴보면, 출발점 x=0 및 x=9인 세로 방향의 두 막대 사이에 임의의 개수의 막대들이 랜덤 간격으로 추가되고(이 예에서는 2개가 추가됨) 이 막대들 사이에 가로 방향의 선들이 또한 랜덤하게 연결된다. X=0인 출발점에서 출발하는 사례에 대해서 화살표로 표시한 바와 같이, 아래 방향으로 진행하면서 좌우 방향으로 이동 가능한 통로가 나타나면 방향 전환을 하게 된다. 방향 전환 이후엔 다.. 2020. 3. 5.