Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
MarkSon-42 committed Jan 15, 2024
2 parents 5ea7122 + 724b0a9 commit eedd087
Show file tree
Hide file tree
Showing 4 changed files with 236 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# [level Lv.1] 달리기 경주 - 178871

[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/178871)

### 성능 요약

메모리: 10.2 MB, 시간: 0.01 ms

### 구분

코딩테스트 연습 > 연습문제

### 채점결과

정확성: 100.0<br/>합계: 100.0 / 100.0

### 제출 일자

2024년 1월 1일 18:54:9

### 문제 설명

<p>얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다.</p>

<p>선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 <code>players</code>와 해설진이 부른 이름을 담은 문자열 배열 <code>callings</code>가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해주세요.</p>

<hr>

<h5>제한사항</h5>

<ul>
<li>5 ≤ <code>players</code>의 길이 ≤ 50,000

<ul>
<li><code>players[i]</code>는 i번째 선수의 이름을 의미합니다.</li>
<li><code>players</code>의 원소들은 알파벳 소문자로만 이루어져 있습니다.</li>
<li><code>players</code>에는 중복된 값이 들어가 있지 않습니다.</li>
<li>3 ≤ <code>players[i]</code>의 길이 ≤ 10</li>
</ul></li>
<li>2 ≤ <code>callings</code>의 길이 ≤ 1,000,000

<ul>
<li><code>callings</code>는 <code>players</code>의 원소들로만 이루어져 있습니다.</li>
<li>경주 진행중 1등인 선수의 이름은 불리지 않습니다.</li>
</ul></li>
</ul>

<hr>

<h5>입출력 예</h5>
<table class="table">
<thead><tr>
<th>players</th>
<th>callings</th>
<th>result</th>
</tr>
</thead>
<tbody><tr>
<td>["mumu", "soe", "poe", "kai", "mine"]</td>
<td>["kai", "kai", "mine", "mine"]</td>
<td>["mumu", "kai", "mine", "soe", "poe"]</td>
</tr>
</tbody>
</table>
<hr>

<h5>입출력 예 설명</h5>

<p>입출력 예 #1</p>

<p>4등인 "kai" 선수가 2번 추월하여 2등이 되고 앞서 3등, 2등인 "poe", "soe" 선수는 4등, 3등이 됩니다. 5등인 "mine" 선수가 2번 추월하여 4등, 3등인 "poe", "soe" 선수가 5등, 4등이 되고 경주가 끝납니다. 1등부터 배열에 담으면 ["mumu", "kai", "mine", "soe", "poe"]이 됩니다.</p>


> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
def solution(players, callings):

idxs = [i for i in range(len(players))]

idx_dictionary = {k:v for k, v in zip(players, idxs)}
# idx_dictionary = {player: i for i, player in enumerate(players)} # 선수: 등수

for j in callings:


idx = idx_dictionary[j] # 호명된 선수의 현재 등수

idx_dictionary[j] -= 1 # 하나 앞 등수로 바꿔줌 -1

idx_dictionary[players[idx-1]] += 1 # 앞에 위치했던 선수의 등수 +1

players[idx-1], players[idx] = players[idx], players[idx-1] # 위치 변경
return players
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# [level Lv.1] [PCCE 기출문제] 9번 / 이웃한 칸 - 250125

[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/250125?language=python3)

### 성능 요약

메모리: 10.2 MB, 시간: 0.01 ms

### 구분

코딩테스트 연습 > PCCE 기출문제

### 채점결과

정확성: 100.0<br/>합계: 100.0 / 100.0

### 제출 일자

2024년 1월 1일 18:24:41

### 문제 설명

<p>각 칸마다 색이 칠해진 2차원 격자 보드판이 있습니다. 그중 한 칸을 골랐을 때, 위, 아래, 왼쪽, 오른쪽 칸 중 같은 색깔로 칠해진 칸의 개수를 구하려고 합니다.</p>

<p>보드의 각 칸에 칠해진 색깔 이름이 담긴 이차원 문자열 리스트 <code>board</code>와 고른 칸의 위치를 나타내는 두 정수 <code>h</code>, <code>w</code>가 주어질 때 <code>board[h][w]</code>와 이웃한 칸들 중 같은 색으로 칠해져 있는 칸의 개수를 return 하도록 solution 함수를 완성해 주세요.</p>

<p>이웃한 칸들 중 몇 개의 칸이 같은 색으로 색칠되어 있는지 확인하는 과정은 다음과 같습니다.</p>
<div class="highlight"><pre class="codehilite"><code>1. 정수를 저장할 변수 n을 만들고 board의 길이를 저장합니다.
2. 같은 색으로 색칠된 칸의 개수를 저장할 변수 count를 만들고 0을 저장합니다.
3. h와 w의 변화량을 저장할 정수 리스트 dh, dw를 만들고 각각 [0, 1, -1, 0], [1, 0, 0, -1]을 저장합니다.
4. 반복문을 이용해 i 값을 0부터 3까지 1 씩 증가시키며 아래 작업을 반복합니다.
4-1. 체크할 칸의 h, w 좌표를 나타내는 변수 h_check, w_check를 만들고 각각 h + dh[i], w + dw[i]를 저장합니다.
4-2. h_check가 0 이상 n 미만이고 w_check가 0 이상 n 미만이라면 다음을 수행합니다.
4-2-a. board[h][w]와 board[h_check][w_check]의 값이 동일하다면 count의 값을 1 증가시킵니다.
5. count의 값을 return합니다.
</code></pre></div>
<ul>
<li>위의 의사코드와 작동방식이 다른 코드를 작성해도 상관없습니다.</li>
</ul>

<hr>

<h4>제한사항</h4>

<ul>
<li>1 ≤ <code>board</code>의 길이 ≤ 7

<ul>
<li><code>board</code>의 길이와 <code>board[n]</code>의 길이는 동일합니다.</li>
</ul></li>
<li>0 ≤ <code>h</code>, <code>w</code> &lt; <code>board</code>의 길이</li>
<li>1 ≤ <code>board[h][w]</code>의 길이 ≤ 10

<ul>
<li><code>board[h][w]</code>는 영어 소문자로만 이루어져 있습니다.</li>
</ul></li>
</ul>

<hr>

<h4>입출력 예</h4>
<table class="table">
<thead><tr>
<th>board</th>
<th>h</th>
<th>w</th>
<th>result</th>
</tr>
</thead>
<tbody><tr>
<td>[["blue", "red", "orange", "red"], ["red", "red", "blue", "orange"], ["blue", "orange", "red", "red"], ["orange", "orange", "red", "blue"]]</td>
<td>1</td>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>[["yellow", "green", "blue"], ["blue", "green", "yellow"], ["yellow", "blue", "blue"]]</td>
<td>0</td>
<td>1</td>
<td>1</td>
</tr>
</tbody>
</table>
<hr>

<h4>입출력 예 설명</h4>

<p>입출력 예 #1</p>

<ul>
<li>주어진 보드를 나타내면 아래 그림과 같고, <code>board[1][1]</code>의 인접한 칸들은 화살표가 가리키는 칸들입니다. 따라서 <code>board[1][1]</code> 주변의 "red" 칸은 총 2개입니다.</li>
</ul>

<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/cb8c0433-a307-4184-b224-6185c87dfc07/9-1.jpg" title="" alt="9-1.jpg"></p>

<p>입출력 예 #2</p>

<ul>
<li>주어진 보드를 나타내면 아래 그림과 같고, <code>board[0][1]</code>의 인접한 칸들은 화살표가 가리키는 칸들입니다. 따라서 <code>board[0][1]</code> 주변의 "green"칸은 총 1개입니다.</li>
</ul>

<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/a9fdec91-df64-4240-82b3-c63d9555e689/9-2.jpg" title="" alt="9-2.jpg"></p>

<hr>

<ul>
<li>cpp를 응시하는 경우 리스트는 배열과 동일한 의미이니 풀이에 참고해주세요.

<ul>
<li>ex) 번호가 담긴 정수 <u><strong>리스트</strong></u> <code>numbers</code>가 주어집니다. =&gt; 번호가 담긴 정수 <u><strong>배열</strong></u> <code>numbers</code>가 주어집니다.</li>
</ul></li>
<li>java를 응시하는 경우 리스트는 배열, 함수는 메소드와 동일한 의미이니 풀이에 참고해주세요.

<ul>
<li>ex) solution <u><strong>함수</strong></u>가 올바르게 작동하도록 한 줄을 수정해 주세요. =&gt; solution <u><strong>메소드</strong></u>가 올바르게 작동하도록 한 줄을 수정해 주세요.</li>
</ul></li>
</ul>


> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
def solution(board, h, w):
# 1. 정수를 저장할 변수 n을 만들고 board의 길이를 저장합니다.
n = len(board)

# 2. 같은 색으로 색칠된 칸의 개수를 저장할 변수 count를 만들고 0을 저장합니다.
count = 0

# 3. h와 w의 변화량을 저장할 정수 리스트 dh, dw를 만들고 각각 [0, 1, -1, 0], [1, 0, 0, -1]을 저장합니다.
dh = [0, 1, -1, 0]
dw = [1, 0, 0, -1]

# 4. 반복문을 이용해 i 값을 0부터 3까지 1 씩 증가시키며 아래 작업을 반복합니다.
for i in range(4):
# 4-1. 체크할 칸의 h, w 좌표를 나타내는 변수 h_check, w_check를 만들고 각각 h + dh[i], w + dw[i]를 저장합니다.
h_check, w_check = h + dh[i], w + dw[i]

# 4-2. h_check가 0 이상 n 미만이고 w_check가 0 이상 n 미만이라면 다음을 수행합니다.
if 0 <= h_check < n and 0 <= w_check < n:
# 4-2-a. board[h][w]와 board[h_check][w_check]의 값이 동일하다면 count의 값을 1 증가시킵니다.
if board[h][w] == board[h_check][w_check]:
count += 1

# 5. count의 값을 return합니다.
return count

0 comments on commit eedd087

Please sign in to comment.