Skip to content

Commit 3264e6d

Browse files
chore: sync baekjoon archives
1 parent 463fc76 commit 3264e6d

File tree

4 files changed

+372
-0
lines changed

4 files changed

+372
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# [level 0] 두 수의 연산값 비교하기 - 181938
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/181938)
4+
5+
### 성능 요약
6+
7+
메모리: 76.9 MB, 시간: 1.40 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 코딩 기초 트레이닝
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2026년 02월 26일 23:33:44
20+
21+
### 문제 설명
22+
23+
<p>연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.</p>
24+
25+
<ul>
26+
<li>12 ⊕ 3 = 123</li>
27+
<li>3 ⊕ 12 = 312</li>
28+
</ul>
29+
30+
<p>양의 정수 <code>a</code>와 <code>b</code>가 주어졌을 때, <code>a</code> ⊕ <code>b</code>와 <code>2 * a * b</code> 중 더 큰 값을 return하는 solution 함수를 완성해 주세요.</p>
31+
32+
<p>단, <code>a</code> ⊕ <code>b</code>와 <code>2 * a * b</code>가 같으면 <code>a</code> ⊕ <code>b</code>를 return 합니다.</p>
33+
34+
<hr>
35+
36+
<h5>제한사항</h5>
37+
38+
<ul>
39+
<li>1 ≤ <code>a</code>, <code>b</code> &lt; 10,000</li>
40+
</ul>
41+
42+
<hr>
43+
44+
<h5>입출력 예</h5>
45+
<table class="table">
46+
<thead><tr>
47+
<th>a</th>
48+
<th>b</th>
49+
<th>result</th>
50+
</tr>
51+
</thead>
52+
<tbody><tr>
53+
<td>2</td>
54+
<td>91</td>
55+
<td>364</td>
56+
</tr>
57+
<tr>
58+
<td>91</td>
59+
<td>2</td>
60+
<td>912</td>
61+
</tr>
62+
</tbody>
63+
</table>
64+
<hr>
65+
66+
<h5>입출력 예 설명</h5>
67+
68+
<p>입출력 예 #1</p>
69+
70+
<ul>
71+
<li><code>a</code> ⊕ <code>b</code> = 291 이고, <code>2 * a * b</code> = 364 입니다. 둘 중 더 큰 값은 364 이므로 364를 return 합니다.</li>
72+
</ul>
73+
74+
<p>입출력 예 #2</p>
75+
76+
<ul>
77+
<li><code>a</code> ⊕ <code>b</code> = 912 이고, <code>2 * a * b</code> = 364 입니다. 둘 중 더 큰 값은 912 이므로 912를 return 합니다.</li>
78+
</ul>
79+
80+
<hr>
81+
82+
<p>※ 2023년 04월 27일 입출력 예 설명이 수정되었습니다.</p>
83+
84+
85+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution {
2+
public int solution(int a, int b) {
3+
String stra = Integer.toString(a);
4+
String strb = Integer.toString(b);
5+
6+
int appendnum = Integer.parseInt(stra+strb);
7+
8+
if(appendnum < 2*a*b) return 2*a*b;
9+
return appendnum;
10+
}
11+
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# [level 3] [PCCP 기출문제] 4번 / 수식 복원하기 - 340210
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/340210)
4+
5+
### 성능 요약
6+
7+
메모리: 71.2 MB, 시간: 1.66 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > PCCP 기출문제
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2026년 02월 26일 23:30:28
20+
21+
### 문제 설명
22+
23+
<p>당신은 덧셈 혹은 뺄셈 수식이 여러 개 적힌 고대 문명의 유물을 찾았습니다. 이 수식들을 관찰하던 당신은 이 문명이 사용하던 진법 체계가 10진법이 아니라는 것을 알아냈습니다. (2 ~ 9진법 중 하나입니다.)</p>
24+
25+
<p>수식들 중 몇 개의 수식은 결괏값이 지워져 있으며, 당신은 이 문명이 사용하던 진법에 맞도록 지워진 결괏값을 채워 넣으려 합니다.</p>
26+
27+
<p>다음은 그 예시입니다.</p>
28+
29+
<p>&lt;<strong>수식</strong>&gt;</p>
30+
<div class="highlight"><pre class="codehilite"><code>14 + 3 = 17
31+
13 - 6 = X
32+
51 - 5 = 44
33+
</code></pre></div>
34+
<ul>
35+
<li><code>X</code>로 표시된 부분이 지워진 결괏값입니다.</li>
36+
</ul>
37+
38+
<p><code>51 - 5 = 44</code>에서 이 문명이 사용하던 진법이 8진법임을 알 수 있습니다. 따라서 <code>13 - 6 = X</code>의 지워진 결괏값을 채워 넣으면 <code>13 - 6 = 5</code>가 됩니다.</p>
39+
40+
<p>다음은 또 다른 예시입니다.</p>
41+
42+
<p>&lt;<strong>수식</strong>&gt;</p>
43+
<div class="highlight"><pre class="codehilite"><code>1 + 1 = 2
44+
1 + 3 = 4
45+
1 + 5 = X
46+
1 + 2 = X
47+
</code></pre></div>
48+
<p>주어진 수식들에서 이 문명에서 사용한 진법이 6 ~ 9진법 중 하나임을 알 수 있습니다. <br>
49+
<code>1 + 5 = X</code>의 결괏값은 6진법일 때 10, 7 ~ 9진법일 때 6이 됩니다. 이와 같이 결괏값이 불확실한 수식은 <code>?</code>를 사용해 <code>1 + 5 = ?</code>와 같이 결괏값을 채워 넣습니다. <br>
50+
<code>1 + 2 = X</code>의 결괏값은 6 ~ 9진법에서 모두 3으로 같습니다. 따라서 <code>1 + 2 = X</code>의 지워진 결괏값을 채워 넣으면 <code>1 + 2 = 3</code>이 됩니다.</p>
51+
52+
<p>덧셈 혹은 뺄셈 수식들이 담긴 1차원 문자열 배열 <code>expressions</code>가 매개변수로 주어집니다. 이때 결괏값이 지워진 수식들의 결괏값을 채워 넣어 순서대로 문자열 배열에 담아 return 하도록 solution 함수를 완성해 주세요.</p>
53+
54+
<hr>
55+
56+
<h5>제한사항</h5>
57+
58+
<ul>
59+
<li>2 ≤ <code>expressions</code>의 길이 ≤ 100
60+
61+
<ul>
62+
<li><code>expressions</code>의 원소는 <code>"A + B = C"</code> 혹은 <code>"A - B = C"</code> 형태의 문자열입니다. A, B, C와 연산 기호들은 공백 하나로 구분되어 있습니다.</li>
63+
<li>A, B는 음이 아닌 두 자릿수 이하의 정수입니다.</li>
64+
<li>C는 알파벳 <code>X</code> 혹은 음이 아닌 세 자릿수 이하의 정수입니다. C가 알파벳 <code>X</code>인 수식은 결괏값이 지워진 수식을 의미하며, 이러한 수식은 한 번 이상 등장합니다. </li>
65+
<li>결괏값이 음수가 되거나 서로 모순되는 수식은 주어지지 않습니다.</li>
66+
</ul></li>
67+
</ul>
68+
69+
<hr>
70+
71+
<h5>입출력 예</h5>
72+
<table class="table">
73+
<thead><tr>
74+
<th>expressions</th>
75+
<th>result</th>
76+
</tr>
77+
</thead>
78+
<tbody><tr>
79+
<td>["14 + 3 = 17", "13 - 6 = X", "51 - 5 = 44"]</td>
80+
<td>["13 - 6 = 5"]</td>
81+
</tr>
82+
<tr>
83+
<td>["1 + 1 = 2", "1 + 3 = 4", "1 + 5 = X", "1 + 2 = X"]</td>
84+
<td>["1 + 5 = ?", "1 + 2 = 3"]</td>
85+
</tr>
86+
<tr>
87+
<td>["10 - 2 = X", "30 + 31 = 101", "3 + 3 = X", "33 + 33 = X"]</td>
88+
<td>["10 - 2 = 4", "3 + 3 = 10", "33 + 33 = 110"]</td>
89+
</tr>
90+
<tr>
91+
<td>["2 - 1 = 1", "2 + 2 = X", "7 + 4 = X", "5 - 5 = X"]</td>
92+
<td>["2 + 2 = 4", "7 + 4 = ?", "5 - 5 = 0"]</td>
93+
</tr>
94+
<tr>
95+
<td>["2 - 1 = 1", "2 + 2 = X", "7 + 4 = X", "8 + 4 = X"]</td>
96+
<td>["2 + 2 = 4", "7 + 4 = 12", "8 + 4 = 13"]</td>
97+
</tr>
98+
</tbody>
99+
</table>
100+
<hr>
101+
102+
<h5>입출력 예 설명</h5>
103+
104+
<p><strong>입출력 예 #1</strong></p>
105+
106+
<p>문제 예시와 같습니다.</p>
107+
108+
<p><strong>입출력 예 #2</strong></p>
109+
110+
<p>문제 예시와 같습니다.</p>
111+
112+
<p><strong>입출력 예 #3</strong></p>
113+
114+
<p><code>30 + 31 = 101</code>에서 이 문명이 사용하던 진법이 6진법임을 알 수 있습니다. 따라서 <code>10 - 2 = X</code>, <code>3 + 3 = X</code>, <code>33 + 33 = X</code>의 지워진 결괏값을 채워 넣으면 <code>10 - 2 = 4</code>, <code>3 + 3 = 10</code>, <code>33 + 33 = 110</code>이 됩니다.</p>
115+
116+
<p>따라서 <code>["10 - 2 = 4", "3 + 3 = 10", "33 + 33 = 110"]</code>을 return 해야 합니다.</p>
117+
118+
<p><strong>입출력 예 #4</strong></p>
119+
120+
<p>수식에 등장하는 숫자들을 통해 이 문명이 사용하던 진법이 8진법 혹은 9진법임을 알 수 있습니다. <code>2 + 2 = X</code>와 <code>5 - 5 = X</code>의 지워진 결괏값을 채워 넣으면 8진법, 9진법에 관계없이 <code>2 + 2 = 4</code>, <code>5 - 5 = 0</code>이 됩니다. <code>7 + 4 = X</code>의 결괏값은 불확실하므로 지워진 결괏값을 채워 넣으면 <code>7 + 4 = ?</code>가 됩니다.</p>
121+
122+
<p>따라서 <code>["2 + 2 = 4", "7 + 4 = ?", "5 - 5 = 0"]</code>을 return 해야 합니다.</p>
123+
124+
<p><strong>입출력 예 #5</strong></p>
125+
126+
<p>네 번째 예시와 같지만 <code>5 - 5 = X</code>가 <code>8 + 4 = X</code>로 바뀌었습니다. 이 문명이 사용하던 진법이 9진법임을 알 수 있으므로 <code>7 + 4 = X</code>와 <code>8 + 4 = X</code>의 지워진 결괏값을 채워 넣으면 <code>7 + 4 = 12</code>, <code>8 + 4 = 13</code>이 됩니다.</p>
127+
128+
<p>따라서 <code>["2 + 2 = 4", "7 + 4 = 12", "8 + 4 = 13"]</code>을 return 해야 합니다.</p>
129+
130+
131+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
import java.util.*;
2+
import java.io.*;
3+
4+
class Solution {
5+
public String[] solution(String[] expressions) {
6+
int[] jinbups = {2,3,4,5,6,7,8,9};
7+
boolean[] correctjinbups = new boolean[8];
8+
9+
for(int i=0; i<8; i++) {
10+
correctjinbups[i] = true;
11+
}
12+
13+
List<Expression> xlist = new ArrayList();
14+
15+
for(String expression : expressions) {
16+
String[] splitlist = expression.split(" ");
17+
String a = splitlist[0];
18+
int op = (splitlist[1].equals("+")) ? 1 : -1;
19+
String b = splitlist[2];
20+
21+
String result = splitlist[4];
22+
23+
// a, b, result 돌면서 이하인거 모두 false로 만들기
24+
for(int i=0; i<a.length(); i++) {
25+
int eachnumber = a.charAt(i) - '0';
26+
27+
for(int j=eachnumber-2; j>=0; j--) {
28+
correctjinbups[j] = false;
29+
}
30+
}
31+
32+
for(int i=0; i<b.length(); i++) {
33+
int eachnumber = b.charAt(i) - '0';
34+
35+
for(int j=eachnumber-2; j>=0; j--) {
36+
correctjinbups[j] = false;
37+
}
38+
}
39+
40+
if(!result.equals("X")) {
41+
for(int i=0; i<result.length(); i++) {
42+
int eachnumber = result.charAt(i) - '0';
43+
44+
for(int j=eachnumber-2; j>=0; j--) {
45+
correctjinbups[j] = false;
46+
}
47+
}
48+
}
49+
50+
// X가 아니면, 각 수식마다 진법 계산을 모두 적용해보고, 지우기
51+
if(!result.equals("X")) {
52+
for(int i=0; i<8; i++) {
53+
if(!correctjinbups[i]) continue;
54+
int converta = Integer.parseInt(splitlist[0], jinbups[i]);
55+
int convertb = Integer.parseInt(splitlist[2], jinbups[i]);
56+
57+
int convertresult = Integer.parseInt(splitlist[4], jinbups[i]);
58+
59+
if(converta + op*convertb != convertresult) correctjinbups[i] = false;
60+
}
61+
}
62+
// X이면 X 리스트에 저장 하기
63+
else {
64+
xlist.add(new Expression(a, b, op));
65+
}
66+
}
67+
68+
List<String> tmpresult = new ArrayList();
69+
70+
for(int i=0; i<xlist.size(); i++) {
71+
Expression eachexp = xlist.get(i);
72+
73+
int lastresult = -1;
74+
boolean alreadyinput = false;
75+
for(int j=0; j<8; j++) {
76+
if(!correctjinbups[j]) continue;
77+
78+
String strcurresult = Integer.toString(Integer.parseInt(eachexp.a, jinbups[j]) + eachexp.op * Integer.parseInt(eachexp.b, jinbups[j]), jinbups[j]);
79+
int curresult = Integer.parseInt(strcurresult);
80+
81+
if(lastresult != -1) {
82+
if(lastresult != curresult) {
83+
StringBuilder sb = new StringBuilder();
84+
sb.append(eachexp.a);
85+
sb.append(" ");
86+
if(eachexp.op == -1) sb.append("-");
87+
else sb.append("+");
88+
sb.append(" ");
89+
sb.append(eachexp.b);
90+
sb.append(" = ");
91+
sb.append("?");
92+
tmpresult.add(sb.toString());
93+
alreadyinput = true;
94+
break;
95+
}
96+
}
97+
lastresult = curresult;
98+
}
99+
100+
if(alreadyinput) continue;
101+
102+
if(lastresult != -1) {
103+
StringBuilder sb = new StringBuilder();
104+
sb.append(eachexp.a);
105+
sb.append(" ");
106+
if(eachexp.op == -1) sb.append("-");
107+
else sb.append("+");
108+
sb.append(" ");
109+
sb.append(eachexp.b);
110+
sb.append(" = ");
111+
sb.append(lastresult);
112+
tmpresult.add(sb.toString());
113+
}
114+
else {
115+
StringBuilder sb = new StringBuilder();
116+
sb.append(eachexp.a);
117+
sb.append(" ");
118+
if(eachexp.op == -1) sb.append("-");
119+
else sb.append("+");
120+
sb.append(" ");
121+
sb.append(eachexp.b);
122+
sb.append(" = ");
123+
sb.append("?");
124+
tmpresult.add(sb.toString());
125+
}
126+
}
127+
128+
String[] result = new String[tmpresult.size()];
129+
for(int i=0; i<tmpresult.size(); i++) {
130+
result[i] = tmpresult.get(i);
131+
}
132+
return result;
133+
}
134+
135+
public class Expression {
136+
String a, b;
137+
int op;
138+
139+
Expression(String a, String b, int op) {
140+
this.a = a;
141+
this.b = b;
142+
this.op = op;
143+
}
144+
}
145+
}

0 commit comments

Comments
 (0)