Skip to content

Commit 25d6b2c

Browse files
authored
Merge pull request #18 from Alg0rithm-Study/toni
Toni
2 parents af13fc8 + 184c94c commit 25d6b2c

File tree

13 files changed

+365
-1
lines changed

13 files changed

+365
-1
lines changed

Toni/.DS_Store

0 Bytes
Binary file not shown.

Toni/Programmers/Programmers.xcodeproj/project.pbxproj

+41-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@
3939
538CAD2B28DED542008112DA /* [Toni] KaKao2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 538CAD2A28DED542008112DA /* [Toni] KaKao2.swift */; };
4040
539883DC285B323000937D9F /* [Toni] Bracket Transform .swift in Sources */ = {isa = PBXBuildFile; fileRef = 539883DB285B323000937D9F /* [Toni] Bracket Transform .swift */; };
4141
539AFEEC28CB675500D144E7 /* [Toni] Get Prime Number.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539AFEEB28CB675500D144E7 /* [Toni] Get Prime Number.swift */; };
42+
539D69F729BF414B00BF949D /* [Toni] Failure rate2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539D69F629BF414B00BF949D /* [Toni] Failure rate2.swift */; };
43+
539D69FB29C07A7A00BF949D /* [Toni] Background Clean.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539D69FA29C07A7A00BF949D /* [Toni] Background Clean.swift */; };
44+
539D6A0529C3040B00BF949D /* [Toni] Small String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539D6A0429C3040B00BF949D /* [Toni] Small String.swift */; };
45+
539D6A0729C3101F00BF949D /* [Toni] Travel uninhabit Island.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539D6A0629C3101F00BF949D /* [Toni] Travel uninhabit Island.swift */; };
46+
539D6A0929C3254100BF949D /* ga1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539D6A0829C3254100BF949D /* ga1.swift */; };
47+
539D6A0B29C3255100BF949D /* gq2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539D6A0A29C3255100BF949D /* gq2.swift */; };
48+
539D6A0D29C3256500BF949D /* ga3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539D6A0C29C3256500BF949D /* ga3.swift */; };
49+
539D6A0F29C3256E00BF949D /* ga4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539D6A0E29C3256E00BF949D /* ga4.swift */; };
4250
53A433F128D5CEDA005E0F46 /* [Toni] File Name Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A433F028D5CEDA005E0F46 /* [Toni] File Name Sort.swift */; };
4351
53A433F328D60BD3005E0F46 /* [Toni] Cross Stepping Bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A433F228D60BD3005E0F46 /* [Toni] Cross Stepping Bridge.swift */; };
4452
53A65DD0284A4B6700D0DE1B /* [Toni] Archery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A65DCF284A4B6700D0DE1B /* [Toni] Archery.swift */; };
@@ -60,6 +68,8 @@
6068
53D65A0B28C8690D00F3128A /* [Toni] Personality Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D65A0A28C8690D00F3128A /* [Toni] Personality Test.swift */; };
6169
53D65A1728C9F3A500F3128A /* [Toni] Parking Fee Calculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D65A1628C9F3A500F3128A /* [Toni] Parking Fee Calculation.swift */; };
6270
53E41C36280D900F0097F898 /* [Toni] Calculate Money.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E41C35280D900F0097F898 /* [Toni] Calculate Money.swift */; };
71+
53E5391529B9C05F00175BC2 /* [Toni] Change Word3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E5391429B9C05F00175BC2 /* [Toni] Change Word3.swift */; };
72+
53E5391729BB160300175BC2 /* [Toni] Travel Route2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E5391629BB160300175BC2 /* [Toni] Travel Route2.swift */; };
6373
53ECF5E329A5F07300AE692D /* [Toni] Expiration Period.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF5E229A5F07300AE692D /* [Toni] Expiration Period.swift */; };
6474
53ECF5E529A7405A00AE692D /* [Toni] Post Delivery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF5E429A7405A00AE692D /* [Toni] Post Delivery.swift */; };
6575
53ECF5E729A7628200AE692D /* skt1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF5E629A7628200AE692D /* skt1.swift */; };
@@ -110,6 +120,14 @@
110120
538CAD2A28DED542008112DA /* [Toni] KaKao2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] KaKao2.swift"; sourceTree = "<group>"; };
111121
539883DB285B323000937D9F /* [Toni] Bracket Transform .swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Bracket Transform .swift"; sourceTree = "<group>"; };
112122
539AFEEB28CB675500D144E7 /* [Toni] Get Prime Number.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Get Prime Number.swift"; sourceTree = "<group>"; };
123+
539D69F629BF414B00BF949D /* [Toni] Failure rate2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Failure rate2.swift"; sourceTree = "<group>"; };
124+
539D69FA29C07A7A00BF949D /* [Toni] Background Clean.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Background Clean.swift"; sourceTree = "<group>"; };
125+
539D6A0429C3040B00BF949D /* [Toni] Small String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Small String.swift"; sourceTree = "<group>"; };
126+
539D6A0629C3101F00BF949D /* [Toni] Travel uninhabit Island.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Travel uninhabit Island.swift"; sourceTree = "<group>"; };
127+
539D6A0829C3254100BF949D /* ga1.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ga1.swift; sourceTree = "<group>"; };
128+
539D6A0A29C3255100BF949D /* gq2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = gq2.swift; sourceTree = "<group>"; };
129+
539D6A0C29C3256500BF949D /* ga3.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ga3.swift; sourceTree = "<group>"; };
130+
539D6A0E29C3256E00BF949D /* ga4.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ga4.swift; sourceTree = "<group>"; };
113131
53A433F028D5CEDA005E0F46 /* [Toni] File Name Sort.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] File Name Sort.swift"; sourceTree = "<group>"; };
114132
53A433F228D60BD3005E0F46 /* [Toni] Cross Stepping Bridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Cross Stepping Bridge.swift"; sourceTree = "<group>"; };
115133
53A65DCF284A4B6700D0DE1B /* [Toni] Archery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Archery.swift"; sourceTree = "<group>"; };
@@ -132,6 +150,8 @@
132150
53D65A0A28C8690D00F3128A /* [Toni] Personality Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Personality Test.swift"; sourceTree = "<group>"; };
133151
53D65A1628C9F3A500F3128A /* [Toni] Parking Fee Calculation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Parking Fee Calculation.swift"; sourceTree = "<group>"; };
134152
53E41C35280D900F0097F898 /* [Toni] Calculate Money.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Calculate Money.swift"; sourceTree = "<group>"; };
153+
53E5391429B9C05F00175BC2 /* [Toni] Change Word3.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Change Word3.swift"; sourceTree = "<group>"; };
154+
53E5391629BB160300175BC2 /* [Toni] Travel Route2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Travel Route2.swift"; sourceTree = "<group>"; };
135155
53ECF5E229A5F07300AE692D /* [Toni] Expiration Period.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Expiration Period.swift"; sourceTree = "<group>"; };
136156
53ECF5E429A7405A00AE692D /* [Toni] Post Delivery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "[Toni] Post Delivery.swift"; sourceTree = "<group>"; };
137157
53ECF5E629A7628200AE692D /* skt1.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = skt1.swift; sourceTree = "<group>"; };
@@ -194,7 +214,6 @@
194214
53D65A1628C9F3A500F3128A /* [Toni] Parking Fee Calculation.swift */,
195215
539AFEEB28CB675500D144E7 /* [Toni] Get Prime Number.swift */,
196216
5372281328CB7E7D00B8678F /* [Toni] Open Chat.swift */,
197-
535DD53A28CC99620039F7AE /* [Toni] Menu Renewal.swift */,
198217
535DD53C28CCB7730039F7AE /* [Toni] Target number.swift */,
199218
535DD53E28CCC27C0039F7AE /* [Toni] Cache.swift */,
200219
535DD54028CCDE880039F7AE /* [Toni] Zip.swift */,
@@ -223,6 +242,17 @@
223242
53800EFF29A8931D0076E85D /* [Toni] TargetNumber3.swift */,
224243
53800F0129AC86060076E85D /* [Toni] Network.swift */,
225244
53800F0329AF3BD70076E85D /* [Toni] Change Word2.swift */,
245+
53E5391429B9C05F00175BC2 /* [Toni] Change Word3.swift */,
246+
53E5391629BB160300175BC2 /* [Toni] Travel Route2.swift */,
247+
539D69F629BF414B00BF949D /* [Toni] Failure rate2.swift */,
248+
539D69FA29C07A7A00BF949D /* [Toni] Background Clean.swift */,
249+
539D6A0429C3040B00BF949D /* [Toni] Small String.swift */,
250+
539D6A0629C3101F00BF949D /* [Toni] Travel uninhabit Island.swift */,
251+
535DD53A28CC99620039F7AE /* [Toni] Menu Renewal.swift */,
252+
539D6A0829C3254100BF949D /* ga1.swift */,
253+
539D6A0A29C3255100BF949D /* gq2.swift */,
254+
539D6A0C29C3256500BF949D /* ga3.swift */,
255+
539D6A0E29C3256E00BF949D /* ga4.swift */,
226256
);
227257
path = Programmers;
228258
sourceTree = "<group>";
@@ -286,6 +316,7 @@
286316
buildActionMask = 2147483647;
287317
files = (
288318
53D5DBFB28CE00E7008029CB /* [Toni] Ilegal User.swift in Sources */,
319+
539D69F729BF414B00BF949D /* [Toni] Failure rate2.swift in Sources */,
289320
53AC1849280B1AB500EF381D /* [Toni] Number String and Voca.swift in Sources */,
290321
532AA0D128E47A3100981917 /* [Toni] joystick.swift in Sources */,
291322
532AA0CF28E4323D00981917 /* [Toni] Change Word.swift in Sources */,
@@ -295,10 +326,13 @@
295326
535DD53F28CCC27C0039F7AE /* [Toni] Cache.swift in Sources */,
296327
53B3FB05285493A700C86BD0 /* [Toni] Friends4Block.swift in Sources */,
297328
53024F65281FCD49006D606C /* [Toni] Claw Crane Game.swift in Sources */,
329+
539D6A0529C3040B00BF949D /* [Toni] Small String.swift in Sources */,
298330
53805E6528143433006AC65A /* [Toni] Press Keypad.swift in Sources */,
299331
538CAD2928DEC77F008112DA /* [Toni] Kakao 1.swift in Sources */,
332+
53E5391729BB160300175BC2 /* [Toni] Travel Route2.swift in Sources */,
300333
53024F67281FE78A006D606C /* [Toni] Secret Map.swift in Sources */,
301334
53AC1847280AABFA00EF381D /* [Toni] Recommend New Id.swift in Sources */,
335+
539D6A0D29C3256500BF949D /* ga3.swift in Sources */,
302336
53A8FF0D28F1ACB000DB2DF5 /* [Toni] skt practice2.swift in Sources */,
303337
534AAAD228ED8F8A00ED2CC1 /* [Toni] Make Same Result Of Queues.swift in Sources */,
304338
538B007D28336CCE00CB2EC7 /* [Toni] Tuple.swift in Sources */,
@@ -315,7 +349,9 @@
315349
539883DC285B323000937D9F /* [Toni] Bracket Transform .swift in Sources */,
316350
538B0079282FCD7700CB2EC7 /* [Toni] News Clustering.swift in Sources */,
317351
534EF98F280C23010098C303 /* [Toni] Dart Game.swift in Sources */,
352+
539D6A0F29C3256E00BF949D /* ga4.swift in Sources */,
318353
537DC4CB290BC8B4007D13CB /* [Toni] Printer.swift in Sources */,
354+
539D6A0729C3101F00BF949D /* [Toni] Travel uninhabit Island.swift in Sources */,
319355
538B007B2831187300CB2EC7 /* [Toni] Check Social Distancing.swift in Sources */,
320356
53A8FF0F28F28D9500DB2DF5 /* skt.swift in Sources */,
321357
53E41C36280D900F0097F898 /* [Toni] Calculate Money.swift in Sources */,
@@ -324,8 +360,10 @@
324360
53024F6928210E89006D606C /* [Toni] Math Expression Max.swift in Sources */,
325361
53800EFE29A76C840076E85D /* skt2.swift in Sources */,
326362
53B3FB072855714F00C86BD0 /* test1.swift in Sources */,
363+
539D69FB29C07A7A00BF949D /* [Toni] Background Clean.swift in Sources */,
327364
53AC184528083EB400EF381D /* [Toni] Get Report Result.swift in Sources */,
328365
535DD53B28CC99620039F7AE /* [Toni] Menu Renewal.swift in Sources */,
366+
539D6A0B29C3255100BF949D /* gq2.swift in Sources */,
329367
53AC183C28082C1400EF381D /* main.swift in Sources */,
330368
53800F0429AF3BD70076E85D /* [Toni] Change Word2.swift in Sources */,
331369
53805E632812D2E7006AC65A /* [Toni] training clothes.swift in Sources */,
@@ -335,11 +373,13 @@
335373
53A433F128D5CEDA005E0F46 /* [Toni] File Name Sort.swift in Sources */,
336374
53ECF5E729A7628200AE692D /* skt1.swift in Sources */,
337375
53D65A1728C9F3A500F3128A /* [Toni] Parking Fee Calculation.swift in Sources */,
376+
539D6A0929C3254100BF949D /* ga1.swift in Sources */,
338377
53A8FF0B28F1A6CE00DB2DF5 /* [Toni] skt practice1.swift in Sources */,
339378
53D65A0B28C8690D00F3128A /* [Toni] Personality Test.swift in Sources */,
340379
53ECF5E529A7405A00AE692D /* [Toni] Post Delivery.swift in Sources */,
341380
53A65DD0284A4B6700D0DE1B /* [Toni] Archery.swift in Sources */,
342381
53C5428B286495CF00B34E38 /* [Toni] Skill Tree.swift in Sources */,
382+
53E5391529B9C05F00175BC2 /* [Toni] Change Word3.swift in Sources */,
343383
538CAD2B28DED542008112DA /* [Toni] KaKao2.swift in Sources */,
344384
);
345385
runOnlyForDeploymentPostprocessing = 0;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// [Toni] Background Clean.swift
3+
// Programmers
4+
//
5+
// Created by Sunwoo on 2023/03/14.
6+
//
7+
8+
import Foundation
9+
10+
func solution59(_ wallpaper:[String]) -> [Int] {
11+
var minx = Int.max
12+
var maxx = Int.min
13+
var miny = Int.max
14+
var maxy = Int.min
15+
16+
var yIndex = 0
17+
for paper in wallpaper {
18+
var xIndex = 0
19+
for sp in paper {
20+
if sp == "#" {
21+
minx = min(minx, xIndex)
22+
maxx = max(maxx, xIndex)
23+
miny = min(miny, yIndex)
24+
maxy = max(maxy, yIndex)
25+
}
26+
xIndex += 1
27+
}
28+
yIndex += 1
29+
}
30+
31+
let answer = [miny , minx, maxy + 1, maxx + 1]
32+
print(answer)
33+
34+
return answer
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//
2+
// [Toni] Failure rate2.swift
3+
// Programmers
4+
//
5+
// Created by Sunwoo on 2023/03/13.
6+
//
7+
8+
import Foundation
9+
10+
func solution58(_ N:Int, _ stages:[Int]) -> [Int] {
11+
var stages = stages
12+
var dict: [(Int, Double)] = []
13+
14+
for i in 1...N {
15+
let total = Double(stages.count)
16+
var count:Double = 0
17+
var index = 0
18+
19+
for item in stages {
20+
if item == i {
21+
stages.remove(at: index)
22+
count += 1
23+
index -= 1
24+
}
25+
index += 1
26+
}
27+
dict.append((i,count == 0.0 ? 0.0 : count/total))
28+
//dict.updateValue(count == 0.0 ? 0.0 : count/total, forKey: i)
29+
}
30+
let sorted = dict.sorted {
31+
$0.1 == $1.1 ? $0.0 < $1.0 : $0.1 > $1.1 }
32+
var answer: [Int] = []
33+
for (key, _) in sorted {
34+
answer.append(key)
35+
}
36+
37+
//print(sorted)
38+
39+
40+
return answer
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//
2+
// [Toni] Small String.swift
3+
// Programmers
4+
//
5+
// Created by Sunwoo on 2023/03/16.
6+
//
7+
8+
import Foundation
9+
10+
func solution60(_ t:String, _ p:String) -> Int {
11+
var tArr = Array(t)
12+
let intP = Int(p)!
13+
var count = 0
14+
15+
for i in 0..<tArr.count - (p.count - 1){
16+
var temp = ""
17+
for j in i..<p.count + i {
18+
temp.append(tArr[j])
19+
}
20+
if intP >= Int(temp)! {
21+
count += 1
22+
}
23+
}
24+
25+
return count
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//
2+
// [Toni] Travel uninhabit Island.swift
3+
// Programmers
4+
//
5+
// Created by Sunwoo on 2023/03/16.
6+
//
7+
8+
import Foundation
9+
10+
func solution61(_ maps:[String]) -> [Int] {
11+
return []
12+
}
+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
//
2+
// ga1.swift
3+
// Programmers
4+
//
5+
// Created by Sunwoo on 2023/03/16.
6+
//62
7+
8+
import Foundation
9+
10+
func solution62(_ sticker:[Int]) -> Int{
11+
var answer = 0
12+
var answerArr: [Int] = []
13+
var answerIndex: [Int] = []
14+
var index = -1
15+
16+
if sticker.count <= 2{
17+
return sticker.max()!
18+
}
19+
20+
if sticker.count % 2 == 0 {
21+
for i in 0..<sticker.count {
22+
if answerIndex.contains(i) {
23+
continue
24+
}
25+
26+
var arr: [Int] = []
27+
if i != sticker.count - 1 {
28+
arr.append(sticker[i])
29+
arr.append(sticker[i+1])
30+
answerArr.append(findMax(arr: arr))
31+
var temp = findXindex(arr: arr)
32+
index = temp + i
33+
answerIndex.append(index)
34+
answerIndex.append(index + 1)
35+
} else {
36+
answerArr.append(sticker[i])
37+
}
38+
}
39+
} else {
40+
for i in 0..<sticker.count {
41+
if answerIndex.contains(i) {
42+
continue
43+
}
44+
45+
var arr: [Int] = []
46+
if i < sticker.count - 2 {
47+
arr.append(sticker[i])
48+
arr.append(sticker[i+1])
49+
arr.append(sticker[i+2])
50+
answerArr.append(findMax(arr: arr))
51+
var temp = findXindex(arr: arr)
52+
if temp == 2 {
53+
answerArr.append(sticker[i])
54+
answerIndex.append(i)
55+
answerIndex.append(i + temp - 1)
56+
}
57+
index = temp + i
58+
answerIndex.append(index)
59+
answerIndex.append(index + 1)
60+
} else {
61+
answerArr.append(sticker[i])
62+
}
63+
}
64+
}
65+
66+
//answerArr.reduce(+, 0)
67+
print(answerArr)
68+
return answer
69+
}
70+
71+
func findMax(arr: [Int]) -> Int {
72+
var maxValue = 0
73+
74+
for a in arr {
75+
maxValue = max(a, maxValue)
76+
}
77+
78+
return maxValue
79+
}
80+
81+
func findXindex(arr: [Int]) -> Int {
82+
var maxValue = arr[0]
83+
var index = 0
84+
85+
for i in 0..<arr.count {
86+
if maxValue < arr[i] {
87+
maxValue = arr[i]
88+
index = i
89+
}
90+
}
91+
92+
return index
93+
}
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//
2+
// ga3.swift
3+
// Programmers
4+
//
5+
// Created by Sunwoo on 2023/03/16.
6+
//64
7+
8+
import Foundation
9+
10+
func solution64(_ sticker:[Int]) -> Int{
11+
let len = sticker.count
12+
13+
if len <= 2 {
14+
return sticker.max()!
15+
}
16+
17+
18+
19+
20+
var dp1 = Array(repeating: 0, count: sticker.count)
21+
var dp2 = Array(repeating: 0, count: sticker.count)
22+
23+
//첫번째 스티커를 뜯었을 경우
24+
dp1[0] = sticker[0]
25+
dp1[1] = sticker[0]
26+
27+
//첫번째 스티커를 뜯지 않았을 경우
28+
dp2[0] = 0
29+
dp2[1] = sticker[1]
30+
31+
for i in 2..<len {
32+
dp2[i] = max(dp2[i-2] + sticker[i], dp2[i-1])
33+
34+
if i < len - 1 {
35+
dp1[i] = max(dp1[i-2] + sticker[i], dp1[i-1])
36+
}
37+
}
38+
39+
print(dp1.max()!)
40+
print(dp2.max()!)
41+
return dp1.max()!
42+
}

0 commit comments

Comments
 (0)