내가 푼 방식:먼저 몫과 나머지를 계산하여, 스피드를 고려했을 때 각 progress에 대해서 계산되는 배열을 구한다. 예를 들어, progresses 가 93,30,55 면 배열 array 는 7,3,9 이다.for 문에 where 절을 이용했다. 위와 같이, in
프로그래머스의 스택,큐 - 프린터 문제이다.스택,큐 문제여서 스택을 이용하려하였다.enumerate와 foreach를 이용하여 딕셔너리로 만든다. 2,1,3,2 였다면 2: 3, 1: 1, 0: 2, 3: 2 와 같이 만들어진다. 이 딕셔너리는 for문으로 값을 확인해
recursive를 이용한 dfs. 그래프를 직접 그리지 않아도되는 문제였다. 다음은 기본 dfs, bfs 구조이다.(참고:https://babbab2.tistory.com/106?category=908012,https://programmers.co.
dfs를 recursive적용했다. 스택을 이용할 수도있지만. 리커시브 하게 돌아갈때 스택처럼 쌓이고 마지막으로 in 한것이 가장먼저 out되는것은 같다. dfs를 돌면서 visit을 채운다.
bfs가 미숙하여 오랜시간이 걸렸다.. 리커시브는 어렵다..그래프를 하나하나 뒤져보러(?) 가는데, 갈 수 있는 좌표인지 확인 후 자리가 1이면 결과에 1을 더하는 식이다. 이웃하는 셀에 갈 필요가 있는지 확인 한 후 간다. 결과가 1등과 동일한 8ms가 나온거 보면
딕셔너리만 잘 사용할 줄 알면 풀 수 있는 문제였다. 아래는 문제를 풀면서 공부한 dictionary와 reduce내용이다.빈 딕셔너리를 만들고 키가 없는 상태에서 추가하면 안만들어진다.따라서 키를 만든 상태에서 추가해야한다.딕셔너리의 values는 array가 아니기
가운데 one+=one의 부분이 시간복잡도가 높은것같다. 쓰면안되는코드방식인가보다.
Int("(32)(12)") // 3212가 된다는 사실을 몰랐다. 따움표안에 변수를 넣기 위해서 "()"이용했다.reduce
대소관계 거꾸로하면 코드가 더 짧아질 수 있음.
리커시브를 적용하기 위해 최대한 리커시브를 사용하였다. 1등 하신분의 코드에비해 길다. stride 에서 to, through의 차이.아래는 : https://www.acmicpc.net/source/24374368
set은 inline함수가 다수 있으므로 주의.타입이 array로 바뀐다.set 은 순서가 없으므로 필요할때마다 sorted를 해야한다.for문 안에 in뒤의 변수를 변형해도 된다!.결론:set은 inline주의, 순서없는거 주의.
한 여덟시간? 안풀렸다. 집중을 못한 탓도 있다.. 잘못했던것.1\. 그래프를 만들때 한쪽방향만 만든것. 그러면 1->7->4 이런 식으로 가야할 때, 7->4 가 없고 4->7만 있으면 못가는 오류발생.2\. 딕셔너리 특정 자리 부를때는 언랩 해야한다.1등분 것 역시
Int()는 옵셔널이기때문에 컴팩트 맵으로 옵셔널 바인딩.numbersi...,sub..<(sub.count-k)라는게 익숙지 않았다.도중에 포기했는데, 한시간정도 고민했으면 했을 수도있을것같다. 다음에는 이게 맞나 하는 코드면 한시간 정도 더 보자.포기한 코드:
한번의 도전에 성공!
프로그래머스에는 스위프트 버전이 없다.. 그래서 만들어봤다..인덱스가 작은, 몸무게 적게 나가는 사람들이랑 많이 나가는 사람들이랑의 조합이용.
나의코드:Any타입을 연습하기 위해 사용해보았다.sorted 클로저를 사용해보았다.아래는 다른분 코드 인데, split을 사용할 경우 아래 append를 할때 string으로 받지못하고 substring로 받는다. 따라서 map을 이용해 string으로 바꿔야한다.그러
백준에서 swift로 시간초과 나면 알고리즘 맞으면 넘어가도되나...어떤분 블로그 보니까 계속 붙잡지말라고 하네요..맞으신 분의 코드에 내 코드에 포함된 아래의 코드를 넣으니 시간초과 발생한다.. 맞으신 분은 sorted를 쓰지 않았다. sorted는 최대 Nlog(N
어려워하던 dfs 를 맞았다..!정상인 파트와 적록색약 파트를 나누어서 계산했다.visit 부분을 먼저 작성하니까 편하다.깨달은것.타입명시 안하면 배열은 any가 된다
깨달은것:스트링을 array시키면 각각이 char이 된다.sqrt 는 double에만 쓸 수 있다.
코딩테스트를 보다가 문자열 다루는게 미숙하다는 생각에 공부했다.마지막 인덱스는 마지막글자 뒤에 있으므로 출력하자면 error 난다. 따라서 beforeindex로 마지막 글자 뽑아낸다. .firstIndex(of:)로 특정 char 위치 알아낸다음 인덱스를 구한 후 r
내일 코테라 쉬운 것 위주로 공부했다...이중 for문인것이 거슬렸지만 n 자체가 적어서 이용했다.다른 코드로도 풀어봤다.첫 코드가 시간이 꽤 소요되는게 있어서 아래 코드를 만들어봤는데 시간이 단축된것을 보았다.. 근데 줄어들 이유가 없는데,, 하고 다시 돌려보니 첫
다른 분들의 코드와 비슷하다. 하지만 다음과 같이 줄일 수 있다.이또한 다음과 같이 줄일 수 있다.String을 연습하기 위해 index를 여러번 써보았다. 하지만 Array로 고치면 위와 같이 코드가 더 깔끔해지는 것을 볼 수 있다.sorted는 bool 을 내보내야
주석처리 한것을 짧게 표현하면 아래것이다. 두코드 모두 맞다.깨달은것: string을 쪼개서 하나씩 보면 char , 따라서 string으로 변환 후 사용할것.return 뒤에 바로 bool표현하기 위한 연습 필요.
깨달은것:return (0..<absolutes.count).map { signs$0 ? absolutes$0 : -absolutes$0 }.reduce(0, +) 같이, Array(0..<absolutes.count) 안해도된다.
깨달은것:Int64(Array(a > b ? b...a : a...b).reduce(0, +))array내부에 a > b ? 를 쓸 생각을 못함.
loswercased 의 return은 string이다.a.sorted().reverse() 하면 에러난다. reverse는 인라인이다. sorted는 인라인이 아니다. 따라서 따로 써야한다.소문자가 먼저 나중에가 대문자 이다.
위와같이 할 수 도 있지만,guard Int(s) != nil else {return false}위처럼 변환 여부를 확인 할 수도있다.
처음에 else 문을 안했더니 틀렸다. 문제에서 마치 입력이 소문자로 들어올 것처럼 이해됐기때문이다. 다음부터는 편견을 가지지 않고 푸는걸로..다음과 같이 축약할 수도있다.깨달은것:1,3 + 2,4 = 1,3,2,4"qe"+"qr" = "qeqr"character +
for each에서 return은 탈출이 아니라 continue이다.따라서 도중에 탈출하는 알고리즘이라면 for문을 쓰자. Int.enumerated() 하면 출력결과와같이 일반 array가 아니다.아래 코드 연습 필요. array0...index.let totalDa
아래코드가 짧지만 너무많은 시간이 걸린다. O(n^3) 이기 때문이다.
float사용하면 0으로 나누어도 오류 안뜨고 inf 로 나온다.sort 두번 할때 if 절로 하는것보다 연속하는것이 더 보기 좋다. 속도도 빠르다.
내코드:깨달은것:String.Index(encodedOffset:) 처음 봤다.. 유용한
깨달은것: remove할 때는 array또는 string의 개수가 0 이아닌지 확인해야한다. array0..<15의 타입은 sliceArray이다. 따라서 array로 고쳐야했다..
string(a,radix:2).count : 글자 수result.reduce(""){$0+ ($1 == "1" ? "
어떻게 최대공약수를 떠올린지는 모르겠지만 사람들은 이렇게 풀었다.나는 아래처럼 규칙을 찾으려했으나 , 39점을 맞았다. 한시간 고민하고 포기하였다. 최대공약수나 외워야겠다.
gcd,lcm은 암기해놓자. 또한 for 문 두개로 배열내 두개의 원소끼리 비교를 reduce로 한 것을 볼 수 있다.
대소문자 구분안한다 = 소문자 또는 대문자로 통일캐시 사이즈가 0 일 거라는 생각 못함.
마지막 4개 테스트케이스 실패.36의 경우 5 이다.규칙찾는 문제는 최소 50개는 해봐야하는것같다.
문제 잘못읽고, 문자가아닌것 모두 지워버려서 한시간 넘었다..isLetter는 character에 쓸 수 있다.
forEach{ (a,b) in에서 a는 인덱스 b는 각각의 값(b.0,b.1) 가질수있다.}
또는,
시간복잡도 O(n log(n)) 인것같은데 시간초과이다.다른 분들 대부분 dictionary로 풀었다. 그렇게 해야겠다.
dfs 가 왜 필요한지 말해주는 문제.내일부터 dfs 공부하자!var n = Int(readLine()!)!var array = Intarray.append(0)for \_ in 0 ..< n { array.append(Int(readLine()!)!)}le
import Foundationvar n = Int(readLine()!)!var A : Int = Intvar B : Int = IntA = (readLine()!.split(separator: " ").map{Int(String($0))!})B = (readLine
time complexity가 O(1)므로.import Foundationvar arr = (readLine()!).split(separator: " ").map{Int(String($0))!}let a = arr0let b = arr1var set = Dictiona
1회: 152ms 2회: 80ms
1회독 2회독
백준bfs - 태권도, 아기상어2,
Replacing if-else statements with the short code reduces the liens of code. But it takes longer than before.
visitedStack을 [Int] contain방식 -> [bool] index체크방식 하여 시간 단축했다. 코드확인.
Since the array is sorted, you can, right off the bat, drop half of the comparisons necessary by checking the middle value. for example binary search.
make hip : n 또는 insert로 할경우 nlogninsert: log nfind-max : 1delete max : log nsearch : n . because we don't know whethere the thing is on left or right
아래는 8ms 코드이고아래는 12ms 코드이다.같은데 시간이 다르다.